#regex #phone-number
#регулярное выражение #телефонный номер
Вопрос:
Я изо всех сил пытаюсь получить правильное регулярное выражение для проверки номера телефона в моем приложении. У меня есть регулярное выражение, которое будет принимать только цифры и некоторые специальные символы, такие как ()-
etc, однако проблема в том, что оно также принимает только символы. Так, например, оно будет принимать что-то вроде ()()()()
. Я хочу изменить регулярное выражение или получить совершенно новое регулярное выражение, которое принимает эти символы, но оно должно содержать хотя бы одно число до и после каждого символа.
Мои требования:
- Только номера
- Номер с комбинацией специальных символов
- За каждым символом должно следовать число (до и после), но пробелы допустимы
- Максимальная длина должна быть 15
Комментарии:
1. Существуют допустимые телефонные номера длиной более 15 цифр, особенно международные. А как насчет extensions (
... x123
) ?2. Нет, я не хочу обрабатывать расширение. И допустимая длина составляет всего 15 для моего приложения. В настоящее время я использую это регулярное выражение. ^ *[0-9()- ]*$ , как я могу сделать номер обязательным здесь? В настоящее время поддерживаются только специальные символы ()- .
3. Достаточно справедливо. Я не предлагаю вам обрабатывать международные телефонные номера во всей их общности, просто вы должны быть явно осведомлены о том, какие ограничения вы накладываете. Из любопытства, откуда взялось число 15? (Телефонные номера в США состоят не более чем из 10 цифр, 11, если считать начальные
1
.)
Ответ №1:
По моему опыту, круглые скобки появляются только вокруг первой группы цифр, и в группе никогда не бывает меньше 3 цифр. Это регулярное выражение делает это и предотвращает использование нескольких последовательных разделителей, за исключением пробела после пары «(123) 456-7890». Я также добавил поддержку периодов в качестве разделителей. Оно допускает 1, 2 или 3 группы чисел и пытается ввести общий диапазон из 7-15 цифр, но это приводит к ошибкам на разрешающей стороне.
^\s*(\d{7,15})||(\d{3,12}[\-.]?\s?\d{3,12}[\-.\s]?)||([(]?\d{3,9}[)\-.]?\s?\d{3,9}[\-.\s]?\d{3,9})\s*
В моей среде мне приходится избегать обратной косой черты — возможно, вам это не нужно, поэтому вам может потребоваться заменить на . Дефис должен быть экранирован, потому что в этом контексте он представляет диапазон.
Комментарии:
1. Спасибо вам всем. Комбинация приведенных выше ответов должна мне помочь. Спасибо