Я хочу написать регулярное выражение для стандартного американского типа номер телефона, который поддерживает следующие форматы:
###-###-####
(###) ###-####
### ### ####
###.###.####
где # - любая цифра. Пока я придумал следующие выражения
^[1-9]\d{2}-\d{3}-\d{4}
^\(\d{3}\)\s\d{3}-\d{4}
^[1-9]\d{2}\s\d{3}\s\d{4}
^[1-9]\d{2}\.\d{3}\.\d{4}
соответственно. Я не совсем уверен, если последнее верно для пунктирной проверить. Я также хочу знать, если есть способ, я мог бы написать одно выражение вместо 4 разных людей, которые обслуживают различные форматы, о которых я упомянул. Если это так, я не уверен, как мне это сделать. И также как я могу изменить выражение/выражения, так что я может включать в себя условие для поддержки код региона как дополнительный компонент. Что-то вроде
+1 ### ### ####
где +1-Код города и это необязательно.
^(\+\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?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$
Обновление :<БР>
Как заметил пользователь Саймон Уивер ниже, если вы заинтересованы в соответствующих на неформатированный число просто сделать разделитель класса по выбору, как [ь\. -]?
^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
Есть множество вариаций на эту проблему. Вот регулярное выражение, похожее на ответ, который я ранее разместил на так.
^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$
Он будет соответствовать следующим примерами и многое другое:
18005551234
1 800 555 1234
+1 800 555-1234
+86 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
800 555 1234x5678
8005551234 x5678
1 800 555-1234
1----800----555-1234
Независимо от того, как номер телефона введен, группы захвата могут быть использованы для разбивки номер телефона, так что вы можете обрабатывать ее в коде.
Вот разбивка выражения, если вы'повторно заинтересованы:
^\s* #Line start, match any whitespaces at the beginning if any.
(?:\+?(\d{1,3}))? #GROUP 1: The country code. Optional.
[-. (]* #Allow certain non numeric characters that may appear between the Country Code and the Area Code.
(\d{3}) #GROUP 2: The Area Code. Required.
[-. )]* #Allow certain non numeric characters that may appear between the Area Code and the Exchange number.
(\d{3}) #GROUP 3: The Exchange number. Required.
[-. ]* #Allow certain non numeric characters that may appear between the Exchange number and the Subscriber number.
(\d{4}) #Group 4: The Subscriber Number. Required.
(?: *x(\d+))? #Group 5: The Extension number. Optional.
\s*$ #Match any ending whitespaces if any and the end of string.
Вносить код города обязательно, просто добавить вопросительный знак после (\д{3}) для кода города.
Добавить один пример с использованием вышеуказанных решений на jsfiddle. Я изменил код немного, как на мой требование к клиентов. Надеюсь, что это помогает кто-то.
/^\s*(?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *[x/#]{1}(\d+))?\s*$/
[См. Пример][1]
Номер телефона регулярное выражение, которое я использую:
/^[+]?выражение (\D{1,2})?[с\. -]?\(?\д{3}\)?[с\. -]?\д{3} [ь\. -]?\д{4}$/
Охватывает:
Здесь'ы довольно компактный, кого я создал.
Search: \+?1?\s*\(?-*\.*(\d{3})\)?\.*-*\s*(\d{3})\.*-*\s*(\d{4})$
Replace: +1 \($1\) $2-$3
Проверяются следующие случаи использования.
18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
1--800--123--4567
+1 (800) 123-4567
^(\+и\D{1,2}\с?)?1?\-?\.?\ы?\(?\д{3}\)?[с\. -]?\д{3} [ь\. -]?\д{4}$
1-718-444-1122
718-444-1122
(718)-444-1122
17184441122
7184441122
718.444.1122
1718.444.1122
1-123-456-7890
1 123-456-7890
1 (123) 456-7890
1 123 456 7890
1.123.456.7890
+91 (123) 456-7890
18005551234
1 800 555 1234
+1 800 555-1234
+86 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
18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
+1 (800) 123-4567
18001234567
1 800 123 4567
+1 800 123-4567
+86 800 123 4567
1-800-123-4567
1 (800) 123-4567
(800)123-4567
(800) 123-4567
(800)1234567
800-123-4567
800.123.4567
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123)123 1231
(123) 123-1231
(123) 123 1231
+99 1234567890
+991234567890
(555) 444-6789
555-444-6789
555.444.6789
555 444 6789
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
(003) 555-1212
(103) 555-1212
(911) 555-1212
18005551234
1 800 555 1234
+86 800-555-1234
1 (800) 555-1234
См. regex101.com
попробуйте это для пакистанских пользователей .Здесь'ы довольно компактный, кого я создал.
((\+92)|0)[.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]
Проверяются следующие случаи использования.
+92 -345 -123 -4567
+92 333 123 4567
+92 300 123 4567
+92 321 123 -4567
+92 345 - 540 - 5883
Как насчет этого?
^(\+?[01])?[-.\s]?\(?[1-9]\d{2}\)?[-.\s]?\d{3}[-.\s]?\d{4}
Редактировать: я забыл о () Один. Правка 2: получил первые 3 цифра неверна.
Выражения для 1, 3 и 4 очень похожи, так что вы можете использовать:
^([1-9]\d{2})([- .])(\d{3})$2(\d{4})$
Обратите внимание, что в зависимости от языка и бренд использовать регулярные выражения, вам может понадобиться, чтобы положить \2
вместо $2
или такие совпадения не могут быть поддержаны на всех.
Я не вижу хороший способ совместить это с форматом 2, помимо очевидных ^(regex для 1,3,4|regex для 2)$
, который коряво, топорно и делает его трудно получить из части номеров.
Как для кода область, вы можете добавить (\+и\D)?
в начале, чтобы захватить одного-значный код региона (к сожалению, я не'т знаю, формат кодов).
Пожалуй, самый простой-сравните с несколькими другими.
\(?\d+\)?[-.\s]?\d+[-.\s]?\d+
Это соответствует следующему:
(555) 444-6789
555-444-6789
555.444.6789
555 444 6789
Этот код соответствует США или Канады номер телефона, а также убедитесь, что это правильный код и обмен:
^((\+1)?[\s-]?)?\(?[2-9]\d\d\)?[\s-]?[2-9]\d\d[\s-]?\d\d\d\d
Регулярное выражение скороговорка для проверки * обычный 10-значный номер телефона плюс дополнительный международный код (от 1 до 3 цифр) и дополнительный номер** (любое количество цифр):
/(\+\d{1,3}\s?)?((\(\d{3}\)\s?)|(\d{3})(\s|-?))(\d{3}(\s|-?))(\d{4})(\s?(([E|e]xt[:|.|]?)|x|X)(\s?\d+))?/g
Демо: https://www.regextester.com/103299
Допустимые записи:
/* Full number */
+999 (999) 999-9999 Ext. 99999
/* Regular local phone number (XXX) XXX-XXXX */
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123)123 1231
(123) 123-1231
(123) 123 1231
/* International codes +XXX (XXX) XXX-XXXX */
+99 1234567890
+991234567890
/* Extensions (XXX) XXX-XXXX Ext. XXX... */
1234567890 Ext 1123123
1234567890Ext 1123123
1234567890 Ext1123123
1234567890Ext1123123
1234567890 Ext: 1123123
1234567890Ext: 1123123
1234567890 Ext:1123123
1234567890Ext:1123123
1234567890 Ext. 1123123
1234567890Ext. 1123123
1234567890 Ext.1123123
1234567890Ext.1123123
1234567890 ext 1123123
1234567890ext 1123123
1234567890 ext1123123
1234567890ext1123123
1234567890 ext: 1123123
1234567890ext: 1123123
1234567890 ext:1123123
1234567890ext:1123123
1234567890 X 1123123
1234567890X1123123
1234567890X 1123123
1234567890 X1123123
1234567890 x 1123123
1234567890x1123123
1234567890 x1123123
1234567890x 1123123
Начиная с @Рави'ы ответ, я также применил проверка правила для НПА (уголок) код.
В частности:
Есть несколько других ограничений, в том числе зарезервированных блоков (N9X, 37x установка напольной быстрая, 96x С) и 555, но я оставил их, особенно потому, что зарезервированные блоки могут увидеть будущее, а 555-это полезно для тестирования.
Вот что я придумал:
^((\+\d{1,2}|1)[\s.-]?)?\(?[2-9](?!11)\d{2}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
Поочередно, если вы также хотите, чтобы соответствовать пустые значения (если поле это'т необходимости), вы можете использовать:
(^((\+\d{1,2}|1)[\s.-]?)?\(?[2-9](?!11)\d{2}\)?[\s.-]?\d{3}[\s.-]?\d{4}$|^$)
Мои тестовые случаи для действительных чисел (многие из @Фрэнсис' ответа) являются:
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
Мой неверный тесты включают в себя:
(003) 555-1212 // Area code starts with 0
(103) 555-1212 // Area code starts with 1
(911) 555-1212 // Area code ends with 11
180055512345 // Too many digits
1 800 5555 1234 // Prefix code too long
+1 800 555x1234 // Invalid delimiter
+867 800 555 1234 // Country code too long
1-800-555-1234p // Invalid character
1 (800) 555-1234 // Too many spaces
800x555x1234 // Invalid delimiter
86 800 555 1212 // Non-NA country code doesn't have +
Мое регулярное выражение не включает группировку для извлечения групп цифр, но он может быть изменен, чтобы включить их.
Я'м просто бросали это там ответ. Ну так это решает проблему мой, он'ы на основе @бурной'ы ответ, но включает в себя 3-значный код страны и, что более важно, может быть использован в любом месте в строке, но выиграл'т матч это's не предшествуют пространству/начала строки и заканчивается на границе слова. Это полезно, Так что он выиграл'т соответствовать случайных чисел в середине URL-адрес или что-то
((?:\s|^)(?:\+\d{1,3}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4})(?:\b)
Я закончил с
константный regexBase = '(?:\\+?(\\д{1,3}))?[-. (]*(\\д{3})?[-. )]*(\\д{3})[-. ]*(\\д{4,5})(?: *х (\выражение\D+))?'; константный phoneRegex = новое регулярное выражение('\\ы*' + regexBase + '\\с*', 'г');
это была возможность для таких вещей, как голландские номера, например
+358 300 20200
Это более полный вариант, который будет соответствовать как можно подумать, а также дать вам группу подходящих для страны, региона, первый и последний.
(?<number>(\+?(?<country>(\d{1,3}))(\s|-|\.)?)?(\(?(?<region>(\d{3}))\)?(\s|-|\.)?)((?<first>(\d{3}))(\s|-|\.)?)((?<last>(\d{4}))))
^(\+1)?\s?(\([1-9]\d{2}\)|[1-9]\d{2})(-|\s|.)\d{3}(-|\s|.)\d{4}
Выше regex представляет собой небольшую модификацию @Фрэнсис Ганьон
.
Цель : выявления возможной шаблон пользователь может поделиться с нами номером телефона
Вариант 1:
^\s*(?:\+?(\d{1,3}))?[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d[\W\D\s]*?\d)(?: *x(\d+))?\s*$
тест сюда сайт CodePen: https://codepen.io/kiranbhattarai/pen/NWKMXQO
объяснение регулярного выражения : https://regexr.com/4kt5j
Версия 2:
\s*(?:\+?(\d{1,3}))?[\W\D\s]^|()*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d[\W\D\s]*?\d)(?: *x(\d+))?\s*$
Что в нем: случаях тест может быть частью строки. В версии один тестовый случай должен стать запуск линии в работу.
сайт CodePen: https://codepen.io/kiranbhattarai/pen/GRKGNGG
объяснение регулярного выражения : https://regexr.com/4kt9n
Если вы можете найти шаблон, который может провалиться, пожалуйста, комментарий, я буду это исправить.
Тестов: Пройдите
8 0 0 4 4 4 5 55 5
1 800 555 1234
+1 800 555-1234
+86 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
800 555 1234x5678
8005551234 x5678
1 800 555-1234
1----800----555-1234
800 (555) 1234
800(555)1234
8 0 0 5 5 5 1 2 3 4
8.0.0.5.5.5.1.2.3.4
8-0-0-5-5-5-1-2-3-4
(8)005551234
(80)05551234
8(00)5551234
8@0@0@5551234
8/0/0/5/5/5/1/2/3/4
8*0*0*5*5*5*1*2*3*4
8:0:0:5:5:5:1:2:3:4
8,0,0,5,5,5,1,2,3,4
800,555,1234
800:555:1234
1-718-444-1122
718-444-1122
(718)-444-1122
17184441122
7184441122
718.444.1122
1718.444.1122
1-123-456-7890
1 123-456-7890
1 (123) 456-7890
1 123 456 7890
1.123.456.7890
+91 (123) 456-7890
18005551234
1 800 555 1234
+1 800 555-1234
+86 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
18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
+1 (800) 123-4567
18001234567
1 800 123 4567
+1 800 123-4567
+86 800 123 4567
1-800-123-4567
1 (800) 123-4567
(800)123-4567
(800) 123-4567
(800)1234567
800-123-4567
800.123.4567
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123) 123-1231
(123) 123 1231
+99 1234567890
+991234567890
(555) 444-6789
555-444-6789
555.444.6789
555 444 6789
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
(003) 555-1212
(103) 555-1212
(911) 555-1212
18005551234
1 800 555 1234
+86 800-555-1234
1 (800) 555-1234
как насчет нескольких номеров с "+" и отделить их с ";" не то "," на глаз "-" или " на " персонажей?