Мне нужно обрабатывать номер телефона с международными кодами, но мне не нужно, чтобы телефон был определенного формата. Я нашел множество примеров того, как применить его для США, Испании и т. Д., Но ни один из них не позволяет просто ввести число с 00 или +, разрешить пробелы и / или дефисы или без пробелов или тире.

У меня есть следующее выражение, примененное к полю номера телефона в приложении asp.net MVC 5:

[RegularExpression(@"^\+?\d*$", ErrorMessage = "Not a valid Telephone number.")]

На своем месте он обрабатывает следующие сценарии:

+19999999999
0019999999999

Что нормально, но не допускает пробелов и / или тире, поэтому числа вроде этого:

+ 1 999 999 99 99
+32 999-999-99-99
+7 999 999-99-99

Не считаются действительными.

Как можно разрешить включение пробелов и / или тире. В частности, можно ли гарантировать, что:

  1. между числами только 1 пробел или 1 тире
  2. Не разрешать пробел или тире (текущий сценарий)
  3. Убедитесь, что используется только знак 1 +
  4. Убедитесь, что номер содержит не менее 10 символов и менее 20 символов.

Если 1. слишком сложно, не могли бы вы просто сказать мне, как разрешить пробелы и / или тире без каких-либо конкретных правил, чтобы число, подобное этому: -33-999 999 + 99-99, хотя и было совершенно неправильным, все равно будет действительным. .

Благодарность

1
Thierry 16 Июл 2017 в 18:33

2 ответа

^ +? (\ s)? \ d * \ s \ d {3} (\ s | -)? \ d {3} (\ s | -)? \ d * (\ s | -)? \ d * $

В приведенном выше регулярном выражении

  • \ s используется для проверки любых пробелов

  • (\ s)? означает, что может быть пробел, а может и нет

  • для проверки длины вы можете заменить * на {rang start, rang end} пример {10,20}

  • \ d {3} означает, что в этом месте можно принимать только 3 цифры

  • (\ s | -)? означает, что может быть пробел или - не оба

================================================== ======================

Вы можете использовать этот веб-сайт для тестирования http://regexr.com/ Обратитесь к этому изображению для получения дополнительной информации
Regx протестировано

Остальное зависит от вас. Вы можете создать свое собственное необходимое регулярное выражение, как только вы его изучите, вам следует проверить шпаргалку по регулярным выражениям на вышеупомянутом веб-сайте. Это очень поможет.

1
mlkptl35 16 Июл 2017 в 19:25
^ - \ d * - \ d * \ s \ d * \ + \ d * - \ d * $ регулярное выражение для -33-999 999 + 99-99
 – 
mlkptl35
16 Июл 2017 в 19:27
Спасибо за то, что указали мне правильное направление и за быстрый ускоренный курс! Мне действительно нужно раз и навсегда научиться использовать RegEx. Очень полезно, но в то же время сплошная боль!
 – 
Thierry
17 Июл 2017 в 02:13
Если это поможет, вам следует проверить эту общую библиотеку Google для синтаксического анализа, форматирования и проверки международных телефонных номеров. github.com/googlei18n/libphonenumber
 – 
mlkptl35
17 Июл 2017 в 20:33

Это самое близкое, что мне удалось заставить мой RegEx работать после того, как я попробовал его на [введите описание ссылки здесь] [regexr], как было предложено @ mlkptl35

^([+]|[00]{2})([0-9]|[ -])*

Это позволит строке:

  1. Начните с символа «+» или «00» для обозначения международной части, за которым следует до 3 цифр.

  2. Разрешите любые цифры, пробел или - после этого

С помощью приведенного выше RegEx я смог обработать следующие числа:

+32999999
+1-99-999-99-99
+33 99-999-99-99
+7 999999999
+44 999999999
+353 99-9999999
+1 99-999-9999
0044999999999
00353 99-999 9999

И так далее.

Я уверен, что он далек от совершенства, но я только учусь, так что заранее извиняюсь перед всеми экспертами "RegEx".

Если у меня будет время улучшить его, я предоставлю обновления.

1
Thierry 17 Июл 2017 в 02:26