Regex не принимает 10-значный номер телефона - PullRequest
0 голосов
/ 16 июня 2011

Я использую это регулярное выражение для подтверждения номера телефона:

^(\\([2-9]\\d{2}\\)|[2-9]\\d{2})[- ]?\\d{3}[- ]?\\d{4}$

Однако, когда я проверяю ввод любого 10-значного телефонного номера без тире или пробелов, например 4042128246, номер не совпадает.

Как можно улучшить это регулярное выражение, чтобы принять этот ввод? Спасибо.

Ответы [ 4 ]

2 голосов
/ 16 июня 2011

Я бы порекомендовал удалить все нецифровые символы, а затем проверить, что у вас осталось 10 цифр. Учитывая это, вы можете сохранить его в общем (то есть, хорошо нормализованном) формате, а затем изменить формат позже в вашем слое дисплея. (В случае, если вы хотите показать тире и / или символы скобок.)

0 голосов
/ 16 июня 2011

У меня работает в PowerShell.Но возьмите его у кого-то, кто работает в телекоммуникационной отрасли - это хорошая идея для анализа телефонных номеров с использованием кода вместо регулярных выражений, если ваша ситуация не требует строго регулярного выражения.

Как сказал Алекс Ховански,лучшее, что нужно сделать, - это быть очень прощающим в том, что вы примете, а затем удалить все (), -и и пробелы.Затем сохраните номер как номер.Вам никогда не придется беспокоиться о ведущих 0 в номере телефона, который необходимо сохранить.(Международные телефонные коды используют начальные нули, но это не часть телефонного номера.)

Стоит также отметить, что, хотя я не знаю ни одного действительного обмена, начинающегося с 0 или 1, в нем нет ничегоэто запрещает это кроме устаревших 7-значных планов набора номера.Таким образом, самый простой способ проверить действительный номер телефона NANP после преобразования в 64-разрядное целое число:

value >= 2000000000 && value <= 9999999999
0 голосов
/ 16 июня 2011

Это соответствует, когда я пытаюсь это сделать в JavaScript.Возможно, это результат того, что используемый вами язык не поддерживает все те же параметры.

0 голосов
/ 16 июня 2011

Вы уверены, что вам нужно избежать обратной косой черты?

Это работает для меня в среде .NET:

^(\([2-9]\d{2}\)|[2-9]\d{2})[- ]?\d{3}[- ]?\d{4}$
...