条件成立,即使为假

时间:2018-11-01 12:41:25

标签: javascript regex if-statement ibm-forms

我正在尝试检查输入值是否为字母数字。根据regex101.com,我的regex应该可以工作。但是所有测试结果均为“不正确”。

我在做什么错了?

var alphaNumeric = /^[a-z0-9]+$/gi;
var input = "123"; //page.input.getValue().toUpperCase();

console.log(input);

if (input.length == 3) {

  if (alphaNumeric.test(input)) {
    console.log("correct");
  } else {
    console.log("incorrect");
  }
} else {

}

2 个答案:

答案 0 :(得分:0)

查看@bobince的答案: https://stackoverflow.com/a/2630538/1241218

  

您正在使用g(全局)RegExp。   在JavaScript中,全局正则表达式具有状态:您可以调用它们(使用exec,   测试等),您将在给定的字符串中获得第一个匹配项。   再次打电话给他们,您将获得下一场比赛,依此类推,直到没有结果为止   匹配,它将重置为下一个字符串的开头。你也可以   写入regex.lastIndex = 0以重置此状态。

     

(这当然是绝对糟糕的设计,   混淆并导致奇怪的错误。欢迎使用JavaScript!)

     

您可以从RegExp中省略g,因为您仅测试了一个   匹配。

因此,根据您的情况,每次尝试都会有不同的结果:

    var alphaNumeric = /^[a-z0-9]+$/gi;
    var input = "123";
    console.log(input);
    if (input.length == 3) {
        for (var i=0; i<5; i++){
            if (alphaNumeric.test(input)) {
                console.log("correct");
            } else {
                console.log("incorrect");
            }
        }

    } else {
        
    }

答案 1 :(得分:-1)

摆脱全局标志(无论如何您都匹配开始和结束)

var alphaNumeric = /^[a-z0-9]+$/i;
console.log(alphaNumeric.test("aaa")); // true
console.log(alphaNumeric.test("AAA")); // true
console.log(alphaNumeric.test("123")); // true
console.log(alphaNumeric.test("a1a1a1")); // true
console.log(alphaNumeric.test("ABC-123")); // false