Условие выполнено, даже если ложно
Я пытаюсь проверить, является ли входное значение буквенно-цифровым. Согласно 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 {
}
3 ответа
Смотрите ответ bobince: /questions/18490023/regulyarnoe-vyirazhenie-javascript-vozvraschayuschee-true-zatem-false-zatem-true-i-t-d/18490039#18490039
Вы используете a g (глобальный) RegExp. В JavaScript глобальные регулярные выражения имеют состояние: вы вызываете их (с помощью exec, test и т. Д.) В первый раз, вы получаете первое совпадение в данной строке. Вызовите их снова, и вы получите следующее совпадение, и так далее, пока не получите совпадение, и оно сбрасывается на начало следующей строки. Вы также можете написать regex.lastIndex= 0, чтобы сбросить это состояние.
(Это, конечно, абсолютно ужасный проект, гарантированно запутанный и вызывающий странные ошибки. Добро пожаловать в JavaScript!)
Вы можете опустить g в вашем RegExp, так как вы проверяете только одно совпадение.
Так что в вашем случае у вас будут разные результаты при каждой попытке:
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 {
}
Избавьтесь от глобального флага (вы все равно начинаете и заканчиваете)
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
/^[a-z0-9]+$/i
^ Start of string
[a-z0-9] a or b or c or ... z or 0 or 1 or ... 9
+ one or more times (change to * to allow empty string)
$ end of string
/i case-insensitive
Так что я думаю, вам нужно удалить г там. желаю удачи