Regex
Я использую этот шаблон для проверки правильности номера телефона
^[0-9\-\+]{9,15}$
Он работает для 0771234567
и +0771234567
,
но я хочу, чтобы он работал для 077-1234567
и +077-1234567
и + 077-1-23-45-67 и + 077-123-45-6-7
Что я должен изменить в шаблоне?
Ответы
Ответ 1
Пожалуйста, обратитесь к этому сообщению 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
поддерживаются
Ответ 2
Это решение фактически проверяет числа и формат. Например: 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