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

В этом руководстве по регулярным выражениям мы научимся проверять международные телефонные номера на основе отраслевого стандарта нотации, определенного ITU-T E.123.

Правила и соглашения, используемые для печати международных телефонных номеров, значительно различаются по всему миру, поэтому сложно обеспечить осмысленную проверку международного телефонного номера, если вы не примете строгий формат. К счастью, существует простая, стандартная для отрасли нотация, указанная в ITU-T E.123. Эта нотация требует, чтобы международные телефонные номера включали начальный знак плюс(известный как международный префиксный символ), и допускает только пробелы для разделения групп цифр.

Также благодаря международному плану нумерации телефонов( ITU-T E.164 ) телефонные номера не могут содержать более 15 цифр. Самые короткие используемые международные телефонные номера содержат семь цифр.

1. Регулярное выражение для сопоставления международных телефонных номеров

Регулярное выражение: ^\+(?:[0-9] ?){6,14}[0-9]$

 ^ # Утверждает позицию в начале строки.\+ # Соответствует буквальному символу «+».(?: # Группировать, но не захватывать:[0-9] # Найдите цифру.\\s # Соответствует символу пробела? # от нуля до одного раза.) # Завершить группу без захвата.{6,14} # Повторите группу от 6 до 14 раз.[0-9] # Найдите цифру.$ # Утверждает позицию в конце строки.

Регулярное выражение выше можно использовать для проверки международных телефонных номеров на основе стандартов ITU-T. Давайте рассмотрим один пример.

List phoneNumbers = new ArrayList();phoneNumbers.add("+1 1234567890123");phoneNumbers.add("+12 123456789");phoneNumbers.add("+123 123456");String regex = "^\\+(?:[0-9] ?){6,14}[0-9]$";Pattern pattern = Pattern.compile(regex);for(String email : phoneNumbers){Matcher matcher = pattern.matcher(email);System.out.println(email +" : "+ matcher.matches());}

Вывод программы:

+1 1234567890123 : true+12 123456789 : true+123 123456 : true

2. Регулярное выражение для международных телефонных номеров в формате EPP

Это регулярное выражение следует международной нотации телефонных номеров, определенной Extensible Provisioning Protocol(EPP). EPP — это относительно новый протокол(завершен в 2004 году), разработанный для связи между реестрами доменных имен и регистраторами. Он используется растущим числом реестров доменных имен, включая .com, .info, .net, .org и .us. Значение этого заключается в том, что международные телефонные номера в стиле EPP все чаще используются и распознаются, и поэтому представляют собой хороший альтернативный формат для хранения(и проверки) международных телефонных номеров.

Номера телефонов в стиле EPP используют формат +CCC.NNNNNNNNNNxEEEE, где C — это код страны из 1–3 цифр, N — до 14 цифр, а E — это(необязательное) расширение. Начальный знак «плюс» и точка после кода страны являются обязательными. Буквальный символ «x» требуется только в том случае, если указано расширение.

Регулярное выражение: ^\+[0-9]{1,3}\.[0-9]{4,14}(?:x.+)?$

List phoneNumbers = new ArrayList();phoneNumbers.add("+123.123456x4444");phoneNumbers.add("+12.1234x11");phoneNumbers.add("+1.123456789012x123456789");String regex = "^\\+[0-9]{1,3}\\.[0-9]{4,14}(?:x.+)?$";Pattern pattern = Pattern.compile(regex);for(String email : phoneNumbers){Matcher matcher = pattern.matcher(email);System.out.println(email +" : "+ matcher.matches());}

Вывод программы:

+123.123456x4444 : true+12.1234x11 : true+1.123456789012x123456789 : true

Не стесняйтесь редактировать приведенное выше регулярное выражение и экспериментировать с ним, чтобы оно соответствовало более строгим форматам телефонных номеров, которые у вас есть в голове.

Прокрутить вверх