Regex

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

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

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

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

Ответ 2

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

Неверный #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 ramal 123 Бразилия

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

наслаждаться

Ответ 3

Рассмотрим:

^\+?[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-', за которым следует любая последовательность цифр, чередующихся с тире, с по меньшей мере одной цифрой между каждой тире и без тире в конце.

Ответ 4

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

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

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

Это еще одна вариация шаблона normal* (special normal*)*, при этом normal имеет значение \d и special -.

Ответ 5

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

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

Ответ 6

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

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

false, ""
false, "+48 504 203 [email protected]@"
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

Ответ 7

Я пробовал:

^(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-значного номера телефона

Ответ 8

^(\+\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

Ответ 9

^+?\d{3}-?\d{2}-?\d{2}-?\d{3}$

Вы можете попробовать это....

Как насчет этого... Надеюсь, это поможет...

^(\\+?)\d{3,3}-?\d{2,2}-?\d{2,2}-?\d{3,3}$

Ответ 10

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

будет соответствовать 0 + 0 + 0 + 0 + 0 + 0 или 000000000 и т.д.

  (\-?[0-9]){7}

будет соответствовать определенному числу цифр с необязательными дефисами в любой позиции среди них.

Каков этот формат +077?

Это не допустимый формат. Никакие коды стран не начинаются с 0.

Цифры после + обычно должны быть кодом страны, длиной от 1 до 3 цифр.

Разрешаем "+" код страны CC, затем необязательный дефис, затем "0" плюс две цифры, затем дефисы и цифры для следующих семи цифр, попробуйте:

  ^\+CC\-?0[1-9][0-9](\-?[0-9]){7}$

Oh и {3,3} является избыточным, упрощается до {3}.

Ответ 11

The following regex matches a '+' followed by n digits


    var mobileNumber = "+18005551212";
    var regex = new RegExp("^\\+[0-9]*$");
    var OK = regex.test(mobileNumber);

    if (OK) {
      console.log("is a phone number");
    } else {
      console.log("is NOT a phone number");  
    }

Ответ 12

Это регулярное выражение соответствует любому номеру с общим форматом 1- (999) -999-9999 и любым другим. Кроме того, регулярное выражение будет разрешать фигурные скобки или фигурные скобки и разделение с периодом , пробел или тире. "^([01][- .])?(\(\d{3}\)|\d{3})[- .]?\d{3}[- .]\d{4}$"

Ответ 13

В дополнение к ответу @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 цифр для кода расширения.

Ответ 14

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

\+?\(?([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)
  • 123 (456) (7890)
  • (123) (456) (7890)

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

Ответ 15

/^(([+]{0,1}\d{2})|\d?)[\s-]?[0-9]{2}[\s-]?[0-9]{3}[\s-]?[0-9]{4}$/gm

https://regexr.com/4n3c4

Проверено на

+94 77 531 2412

+94775312412

077 531 2412

0775312412

77 531 2412

//Не соответствует

77-53-12412

+94-77-53-12412

077 123 12345

77123 12345