Регулярное выражение проверки телефона - PullRequest
50 голосов
/ 26 декабря 2011

Я использую этот шаблон для проверки правильности номера телефона

^[0-9\-\+]{9,15}$

Это работает для 0771234567 и +0771234567, но я хочу, чтобы он работал на 077-1234567 и +077-1234567 и + 077-1-23-45-67 и + 077-123-45-6-7

Что я должен изменить в шаблоне?

Ответы [ 14 ]

36 голосов
/ 27 декабря 2011

Пожалуйста, обратитесь к этой публикации SO

пример регулярного выражения в jquery для телефонных номеров

/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
  • (123) 456 7899
  • (123) .456.7899
  • (123) -456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899

поддерживаются

21 голосов
/ 05 сентября 2013

enter image description here Это решение фактически проверяет числа и формат. Например: 123-456-7890 является допустимым форматом, но НЕ является действительным номером США , и этот ответ подтверждает то, чего нет у других.


Если вы не хотите расширять возможности, удалите следующее, включая скобки: (?: \ S * (?.? # | Х | доб | расширение) \ S * (\ d +) \ s *.?)? :)

edit (приложение) Мне это нужно было только в приложении на стороне клиента, поэтому я преобразовал его. Вот это для людей Javascript:

var myPhoneRegex = /(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$/i;
if (myPhoneRegex.test(phoneVar)) {
    // Successful match
} else {
    // Match attempt failed
}

НТН. конец редактирования

Это позволяет расширения или нет и работает с .NET

(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$

Для проверки с пробелами или без них. Возможно, при использовании валидаторов .NET и обрезки на стороне сервера используйте это немного другое регулярное выражение:

(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$

Все действующие:

1 800 5551212

800 555 1212

8005551212

18005551212

+ 1800 555 1212 добавочный65432

800 5551212 ext3333

Invalid # s

234-911-5678

314-159-2653

123-234-5678


РЕДАКТИРОВАТЬ: На основе комментария Фелипе я обновил это для международного.

На основании того, что я мог узнать из здесь и здесь относительно действительных глобальных чисел

Это проверено как первая линия защиты, конечно. Главным элементом международного номера является то, что он не длиннее 15 символов. Я не написал замену для всех не цифр и суммировал результат. Это должно быть сделано для полноты. Кроме того, вы можете заметить, что Я не комбинировал регулярное выражение Северной Америки с этим. Причина в том, что это международное регулярное выражение будет соответствовать номерам в Северной Америке, однако он также будет принимать известные недействительные # такие как +1 234-911-5678. Для более точных результатов вы также должны разделить их.

Паузы и другие инструменты набора номера не упоминаются и поэтому недействительны согласно E.164

\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?

С 1-10-буквенным словом для расширения и 1-6-значным расширением:

\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})? ?(\w{1,10}\s?\d{1,6})?

Действительный международный: название страны для ссылки не совпадает.

+ 55 11 99999-5555 Бразилия

+ 593 7 282-3889 Эквадор

(+ 44) 0848 9123 456 Великобритания

+ 1 284 852 5500 БВО

+ 1 345 9490088 Большой Кайман

+ 32 2 702-9200 Бельгия

+ 65 6511 9266 Азиатско-Тихоокеанский регион

+ 86 21 2230 1000 Шанхай

+ 9124 4723300 Индия

+ 821012345678 Южная Корея

И для вашего удовольствия

+ 55 11 99999-5555 Рамал 123 Бразилия

+ 55 11 99999-5555 foo786544 Бразилия

Наслаждайтесь

8 голосов
/ 26 декабря 2011

Рассмотрим:

^\+?[0-9]{3}-?[0-9]{6,12}$

Это позволяет только + в начале;для этого требуется 3 цифры, за которыми следует дополнительная тире, а затем еще 6-12 цифр.

Обратите внимание, что исходное регулярное выражение допускает «телефонные номера», такие как 70+12---12+92, что немного либеральнее, чем вы, вероятно,имел в виду.


Вопрос был изменен следующим образом:

+ 077-1-23-45-67 и + 077-123-45-6-7

Теперь вам, вероятно, нужно использовать систему регулярных выражений, которая поддерживает альтернативы:

^\+?[0-9]{3}-?([0-9]{7}|[0-9]-[0-9]{2}-[0-9]{2}-[0-9]{2}|[0-9]{3}-[0-9]{2}-[0-9]-[0-9])$

Первая альтернатива - семь цифр;второй 1-23-45-67;третий 123-45-6-7.Все они имеют дополнительный плюс +, за которым следуют 3 цифры и дополнительный префикс тире -.

В приведенном ниже комментарии упоминается другой шаблон:

+ 077-12-34-567

Не совсем понятно, каким должен быть общий шаблон - возможно, одна или несколько цифр разделены черточками;цифры впереди и сзади?

^\+?[0-9]{3}-?[0-9](-[0-9]+)+$

Это позволит использовать префикс «+ 077-», за которым следует любая последовательность цифр, чередующихся с тире, с хотя бы одной цифрой между каждым тире и без тире в конце.

5 голосов
/ 25 июля 2013
/^[0-9\+]{1,}[0-9\-]{3,15}$/

поэтому сначала это цифра или +, затем несколько цифр или -

5 голосов
/ 26 декабря 2011

Сначала проверьте длину строки, чтобы увидеть, находится ли она между 9 и 15.

Затем используйте это регулярное выражение для проверки:

^\+?\d+(-\d+)*$

Это еще один вариант *Шаблон 1006 *, с normal, равным \d и special, являющимся -.

4 голосов
/ 14 ноября 2018

У меня есть более общее регулярное выражение, позволяющее пользователю вводить только цифры: +, -, whitespace и () Он учитывает баланс в скобках, и после символа всегда стоит число.

^([+]?[\s0-9]+)?(\d{3}|[(]?[0-9]+[)])?([-]?[\s]?[0-9])+$

false, ""
false, "+48 504 203 260@@"
false, "+48.504.203.260"
false, "+55(123) 456-78-90-"
false, "+55(123) - 456-78-90"
false, "504.203.260"
false, " "
false, "-"
false, "()"
false, "() + ()"
false, "(21 7777"
false, "+48 (21)"
false, "+"
true , " 1"
true , "1"
true, "555-5555-555"
true, "+48 504 203 260"
true, "+48 (12) 504 203 260"
true, "+48 (12) 504-203-260"
true, "+48(12)504203260"
true, "+4812504203260"
true, "4812504203260
4 голосов
/ 17 сентября 2016

Я пытался:

^(1[ \-\+]{0,3}|\+1[ -\+]{0,3}|\+1|\+)?((\(\+?1-[2-9][0-9]{1,2}\))|(\(\+?[2-8][0-9][0-9]\))|(\(\+?[1-9][0-9]\))|(\(\+?[17]\))|(\([2-9][2-9]\))|([ \-\.]{0,3}[0-9]{2,4}))?([ \-\.][0-9])?([ \-\.]{0,3}[0-9]{2,4}){2,3}$

Я позаботился о специальных кодах стран, таких как 1-97 ... также.Вот числа, с которыми я проверял (из Puneet Lamba и MCattle):

***** PASS *****
18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1.800.555.1234
+1.800.555.1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
(+230) 5 911 4450
123345678
(1) 345 654 67
+1 245436
1-976 33567
(1-734) 5465654
+(230) 2 345 6568
***** CORRECTLY FAILING *****
(003) 555-1212
(103) 555-1212
(911) 555-1212
1-800-555-1234p
800x555x1234
+1 800 555x1234
***** FALSE POSITIVES *****
180055512345
1 800 5555 1234
+867 800 555 1234
1 (800)  555-1234
86 800 555 1212

Первоначально размещено здесь: Регулярное выражение для соответствия стандартному 10-значному номеру телефона

3 голосов
/ 21 сентября 2017
^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$

Соответствует следующим случаям:

123-456-7890

(123) 456-7890

123 456 7890

123.456.7890

+ 91 (123) 456-7890

0 голосов
/ 22 апреля 2019

Попробуйте это

\+?\(?([0-9]{3})\)?[-.]?\(?([0-9]{3})\)?[-.]?\(?([0-9]{4})\)?

Соответствует следующим случаям

  • + 123- (456) - (7890)
  • 123 +. (456). (7890)
  • + (123). (456). (7890)
  • + (123) - (456) - (7890)
  • + 123 (456) (7890)
  • + (123) (456) (7890)
  • 123- (456) - (7890)
  • 123. (456). (7890)
  • (123) - (456) - (7890)
  • 123 (456) (7890)

Для дальнейшего объяснения по шаблону CLICKME

0 голосов
/ 28 августа 2018

В дополнение к ответу @Joe Johnston, это также примет:

+16444444444,,241119933

(Требуется для поддержки специальных символов Apple для входящих звонков - https://support.apple.com/kb/PH18551?locale=en_US)

\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})? ?([\w\,\@\^]{1,10}\s?\d{1,10})?

Примечание: принимает до 10 цифр для кода расширения

...