即使为假也满足条件
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
【讨论】:
与接受的解决方案相同的结论,为什么不赞成?以上是关于即使为假也满足条件的主要内容,如果未能解决你的问题,请参考以下文章
带有 useEffect 的 Next.js useRouter 即使在页面刷新时满足条件也会推送
即使满足条件并且即使目标表和源表中的字段已经存在,雪花合并也会添加数据