Regex неожиданный результат - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь проверить, содержит ли пользовательский ввод только 0 или 1 с помощью Regex?Но он также принимает разные значения.

inputChange = (e) => {
    console.log(/(^$)|[0,1]*/g.test(e.target.value));
};

Приведенный выше метод возвращает true для строки '222', но когда я использую онлайн-проверку Regex, он говорит, что мой Regex верен.

1 Ответ

1 голос
/ 15 марта 2019

Почему оно совпадает и с другими значениями?

Ну [0,1]* здесь * означает совпадение нуля или более времени, поэтому в случае значений, отличных от 0 and 1, оно по-прежнему совпадаетно zero время

Таким образом, вы можете изменить * на +

/(?:^$)|^[01]+$/
    |     |__________  Matches string with only zero and one
    |     
    |________________  Match empty strings. ( Non capturing group)

console.log(/(?:^$)|^[01]+$/.test('222'))
console.log(/(?:^$)|^[01]+$/.test(''))
console.log(/(?:^$)|^[01]+$/.test('1111111 111111'))  // fails because there's a space
console.log(/(?:^$)|^[01]+$/.test('010101'))

Примечание на стороне: - Не следует использовать флаг g с тестом.Прочитайте здесь Почему "делает регулярное выражение с глобальным флагом" даёт неправильный результат "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...