Регулярное выражение с множителем для одного символа внутри набора символов - PullRequest
1 голос
/ 19 марта 2019

Мне нужен Regex для подтверждения номера телефона. Пробелы разрешены (но только по одному за раз).

ОК: +45 1234 1234

НЕ ОК: +45 1234 1234

ОК: 0045 54 45 45 45

НЕ ОК: 0045 54 45 45 45

Я пробовал /^[+]?[0-9\s-]*$/, но он не работает, поскольку допускает наличие нескольких пробелов.

Ответы [ 2 ]

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

Ваше регулярное выражение ^[+]?[0-9\s-]*$ соответствует строке, которая начинается с необязательного плюса ([+]?) и затем имеет неограниченное количество (0 или более) цифр, пробелов или дефисов, таким образом, оно даже соответствует строке "+ --- ":

enter image description here

Вам нужно использовать

/^\+?[0-9]+(?:[\s-][0-9]+)*$/

См. Демонстрационную версию regex и график regulex :

enter image description here

Не забудьте оставить - в конце класса символов в [\s-], если вы хотите оставить его без экранирования или избежать дефиса внутри класса символов, [\s\-].

Детали

  • ^ - начало строки
  • \+? - необязательный + символ
  • [0-9]+ - одна или несколько цифр
  • (?:[\s-][0-9]+)* - группа без захвата, которая соответствует 0 или более повторениям
    • [\s-] - класс символов, соответствующий одному пробелу или -
    • [0-9]+ - 1 или более цифр
  • $ - конец строки
1 голос
/ 19 марта 2019

Попробуйте использовать это регулярное выражение:

var re = /^\+?\d+(\s\d+)*$/;
var strings = ["+45 1234 1234", "+45  1234 1234", "0045 54 45 45 45", "0045 54  45 45   45"];
strings.forEach(s => console.log(s.match(re)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...