我正在尝试检查输入值是否为字母数字。根据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 {
}
答案 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