即使为假也满足条件

Posted

技术标签:

【中文标题】即使为假也满足条件【英文标题】:condition is met even when is false 【发布时间】:2019-04-05 16:32:41 【问题描述】:

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

我做错了什么?

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 

【问题讨论】:

RegEx for javascript to allow only alphanumeric的可能重复 But all test results in "incorrect". 可以提供不起作用的示例输入吗? 不是重复的。请阅读我的问题。 @RuiJarimba page没有定义,getValue()是什么? 有效!你得到了什么输出? 【参考方案1】:

查看@bobince的回答: https://***.com/a/2630538/1241218

您正在使用 g(全局)正则表达式。 在 JavaScript 中,全局正则表达式有状态:你调用它们(使用 exec, 测试等)第一次,你得到给定字符串中的第一个匹配项。 再次打电话给他们,你会得到下一场比赛,依此类推,直到你没有 match 并重置为下一个字符串的开头。你也可以 写 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 
        
    

【讨论】:

【参考方案2】:

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

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

【讨论】:

与接受的解决方案相同的结论,为什么不赞成?

以上是关于即使为假也满足条件的主要内容,如果未能解决你的问题,请参考以下文章

分支&循环

即使条件不满足,处理库 CSV 也会继续添加行

带有 useEffect 的 Next.js useRouter 即使在页面刷新时满足条件也会推送

即使满足条件并且即使目标表和源表中的字段已经存在,雪花合并也会添加数据

即使第一个条件为假,是不是所有条件都在 if 语句中进行检查?

为啥即使条件为假,这个“IF”也总是执行?