условие выполнено, даже если ложно - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь проверить, является ли введенное значение буквенно-цифровым. Согласно 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 голосов
/ 01 ноября 2018

См. Ответ @ bobince : https://stackoverflow.com/a/2630538/1241218

Вы используете g (глобальный) RegExp. В JavaScript глобальные регулярные выражения имеют состояние: вы вызываете их (с помощью exec, тестирование и т. д.) в первый раз вы получите первое совпадение в заданной строке. Позвоните им снова, и вы получите следующий матч, и так до тех пор, пока вы не получите совпадать, и он сбрасывается в начало следующей строки. Вы также можете напишите 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 {
        
    }
0 голосов
/ 01 ноября 2018

Избавьтесь от глобального флага (в любом случае вы начинаете и заканчиваете)

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...