Я хочу написать регулярное выражение для стандартного номера телефона в США, которое поддерживает следующие форматы:
###-###-####
(###) ###-####
### ### ####
###.###.####
где # означает любое число. Пока что я придумал следующие выражения
^[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}
соответственно. Я не совсем уверен, подходит ли последний вариант для пунктирной проверки. Я также хочу знать, есть ли способ написать одно выражение вместо четырех разных, которые подходят для разных форматов, которые я упомянул. Если да, то я не знаю, как мне это сделать. А также как мне изменить выражение / выражения, чтобы я мог также включить условие для поддержки кода области в качестве необязательного компонента. Что-то вроде
+1 ### ### ####
где +1 - код города, это необязательно.
Ответы:
Соответствует следующим
Если вы не хотите совпадать с номерами за пределами США, используйте
Обновление:
как заметил пользователь Саймон Уивер ниже, если вы также заинтересованы в сопоставлении неформатированных чисел, просто сделайте класс символов разделителя необязательным, как
[\s.-]?
источник
?
относится к круглым скобкам()
, а не к цифрам. Полное связанное регулярное выражение\(?\d{3}\)?
.\d{3}
указывает, что должно быть три цифры между теми()
, которые (сделаны) необязательными (по?
).?
после каждого,[\s.-]
чтобы сделать его необязательным^(\+\d{1,2}\s)?((\(\d{3}\))|(\d{3}))[\s.-]\d{3}[\s.-]\d{4}$
. (Я просто продублировал сегмент RegEx, который покрывает код области, и разрешил один вариант с скобками и один без)Есть много вариантов этой проблемы. Вот регулярное выражение, похожее на ответ, который я ранее разместил на SO.
Это соответствует следующим примерам и многому другому:
Независимо от способа ввода номера телефона, группы захвата можно использовать для разбивки номера телефона, чтобы вы могли обработать его в своем коде.
Вот разбивка выражения, если вам интересно:
Чтобы сделать код города необязательным, просто добавьте знак вопроса после (\ d {3}) для кода города.
источник
\s
в начале и в конце не нужны, потому что я использую для проверки, а поле уже обрезано.^(\+\d{1,2}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
Соответствует этим телефонным номерам:
См. Regex101.com
источник
Вот довольно компактный, который я создал.
Протестировано в следующих случаях использования.
источник
Добавление примера с использованием вышеупомянутых решений на jsfiddle. Я немного изменил код в соответствии с требованиями моих клиентов. Надеюсь, это тоже кому-то поможет.
См. Пример здесь
источник
попробуйте это для пакистанских пользователей. Вот довольно компактный, который я создал.
Протестировано в следующих случаях использования.
источник
Регулярное выражение номера телефона, которое я использую:
/^[+]?(\d{1,2})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/
Крышки:
источник
Выражения для 1, 3 и 4 очень похожи, поэтому вы можете использовать:
Обратите внимание, что в зависимости от языка и марки используемых регулярных выражений вам может потребоваться поставить
\2
вместо,$2
или такое сопоставление может вообще не поддерживаться.Я не вижу хорошего способа объединить это с форматом 2, кроме очевидного,
^(regex for 1,3,4|regex for 2)$
которое уродливо, неуклюже и затрудняет извлечение частей чисел.Что касается кода города, вы можете добавить
(\+\d)?
в начало, чтобы захватить однозначный код города (извините, я не знаю формат ваших кодов города).источник
Как насчет этого?
РЕДАКТИРОВАТЬ: Я забыл об одном (). РЕДАКТИРОВАТЬ 2: Неправильная первая трехзначная часть.
источник
.
классе символов нет необходимости экранировать точку , так[-\.\s]
что на самом деле должно быть[-.\s]
, потому что мы не хотим совпадать с обратной косой чертой.[\.]
и[.]
оба соответствуют только точке, тогда как[\\.]
совпадают как точка, так и обратная косая черта. Спасибо за ваше замечание.Начиная с ответа @Ravi, я также применил некоторые правила проверки для кода NPA (Area) .
В частности:
Есть еще пара ограничений, включая зарезервированные блоки (N9X, 37X, 96X) и 555, но я не учел их, особенно потому, что зарезервированные блоки могут использоваться в будущем, а 555 полезен для тестирования.
Вот что я придумал:
В качестве альтернативы, если вы также хотите сопоставить пустые значения (если поле не требуется), вы можете использовать:
Мои тестовые примеры для действительных чисел (многие из ответов @Francis):
Мои неверные тестовые примеры включают:
Мое регулярное выражение не включает группировку для извлечения групп цифр, но его можно изменить, чтобы включить их.
источник
Возможно, самый простой по сравнению с несколькими другими.
Соответствует следующему:
источник
Этот код будет соответствовать номеру телефона в США или Канаде, а также будет гарантировать, что это действительный код города и обмен:
Тест на Regex101.com
источник
Шаблон Regex для проверки обычного 10-значного телефонного номера плюс дополнительный международный код (от 1 до 3 цифр) и дополнительный добавочный номер (любое количество цифр):
Демо-версия: https://www.regextester.com/103299
Действительные записи:
источник
Я считаю это регулярное выражение наиболее полезным для 10-значного контактного номера:
Ссылка : https://regex101.com/r/QeQewP/1
Объяснение:
источник
источник
Это более полная версия, которая будет соответствовать, насколько я могу думать, а также предоставит вам групповое сопоставление для страны, региона, первого и последнего.
источник
как насчет нескольких чисел с помощью «+» и разделения их с помощью «;» "," "-" или "" символы?
источник
Я закончил с
const regexBase = '(?:\\+?(\\d{1,3}))?[-. (]*(\\d{3})?[-. )]*(\\d{3})[-. ]*(\\d{4,5})(?: *x(\\d+))?'; const phoneRegex = new RegExp('\\s*' + regexBase + '\\s*', 'g');
это должно было разрешить такие вещи, как голландские числа, например
+358 300 20200
источник
Над регулярным выражением есть небольшая модификация
@Francis Gagnon.
Цель: выявить любую возможную закономерность, по которой пользователь может поделиться своим номером телефона в США.
Версия 1:
Версия 2:
Что в нем: тестовые примеры могут быть частью строки. В первой версии тестовые примеры должны быть началом работы.
Если вы найдете шаблон, который может дать сбой, оставьте комментарий, я исправлю его.
Тестовые случаи: Пройдено
источник
Я просто бросаю этот ответ туда, поскольку он решает мою проблему, он основан на ответе @stormy, но включает трехзначные коды стран и, что более важно, может использоваться в любом месте строки, но не будет соответствовать, если это не перед ним стоит пробел / начало строки и заканчивается границей слова. Это полезно, чтобы не совпадать случайные числа в середине URL-адреса или чего-то подобного.
источник