sM0kfyz
@sM0kfyz
Frontend dev.

Почему не совпадает строка с регулярным выражением?

Во всех приведенных вызовах возвращает false. А должно true). Помогите разобраться.
Моя логика:
^1? - в начале строки либо 1 либо ничего.
\s? -дальше, возможно, есть пробел
\((?=...\)) - открывающая скобка, если дальше есть три символа и закрывающая скобка
...\)?\s?-? - три символа, и, возможно, закрывающая скобка, пробел, дефис.
Дальше регулярное выражение работает правильно.
Где ошибка?

function telephoneCheck(str) {
  return /^1?\s?\((?=...\))...\)?\s?-?...-?\s?....$/.test(str);
}



telephoneCheck("555-555-5555"); // true
telephoneCheck("5555555555"); // true
telephoneCheck("1 555-555-5555"); // true
telephoneCheck("1 555 555 5555"); // true

/*
Also true (it works)
(555)555-5555
(555) 555-5555
1(555)555-5555
*/

/*
False
(6505552368)
0 (757) 622-7382
-1 (757) 622-7382
10 (757) 622-7382
555)-555-5555
etc.
*/
  • Вопрос задан
  • 245 просмотров
Решения вопроса 1
amux
@amux
alp.ac
Попробуйте так:
^1?\s?\(?[0-9]{3}\)?[\-|\s]?[0-9]{3}[\-|\s]?[0-9]{4}$

https://regex101.com/r/bQcUVo/2

[\-|\s]? - минус или пробел
[0-9]{3} - 3 числа от 0 до 9
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Это, конечно, тоже фигня, но уже работает:
^1?\s?\d{3}(\s|\-)?\d{3}(\s|\-)?\d{4}https://regex101.com/r/f8iqFa/1

Уточните что именно должна проверять эта штука. Уверены ли вы, что хотите отсеять все телефоны, в которых потеряна скобочка, например?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы