- Проверка Телефонных Номеров С Помощью Регулярного Выражения Java
- 1. Обзор
- 2. Регулярные выражения для проверки телефонных номеров
- 2.1. Десятизначное число
- 2.2. Число С пробелами, Точками или Дефисами
- 2.3. Число В Круглых Скобках
- 2.4. Номер С Международным Префиксом
- 3. Применение Нескольких Регулярных Выражений
- 4. Заключение
- Проверка телефонных номеров с помощью Java Regex
- 2. Регулярные выражения для проверки телефонных номеров
- 2.1. Десятизначное число
- 2.2. Число с пробелами, точками или дефисами
- 2.3. Число в скобках
- 2.4. Номер с международным префиксом
- 3. Применение нескольких регулярных выражений
- 4. Вывод
- Регулярные выражения Java: проверяем номер телефона
Проверка Телефонных Номеров С Помощью Регулярного Выражения Java
Узнайте, как проверить различные форматы телефонных номеров с помощью регулярных выражений.
1. Обзор
Иногда нам нужно проверить текст, чтобы убедиться, что его содержимое соответствует определенному формату. В этом кратком руководстве мы рассмотрим, как проверить различные форматы телефонных номеров с помощью регулярных выражений .
2. Регулярные выражения для проверки телефонных номеров
2.1. Десятизначное число
Давайте начнем с простого выражения, которое будет проверять, имеет ли число десять цифр и ничего больше :
@Test public void whenMatchesTenDigitsNumber_thenCorrect() < Pattern pattern = Pattern.compile("^\\d$"); Matcher matcher = pattern.matcher("2055550125"); assertTrue(matcher.matches()); >
Это выражение позволит использовать такие числа, как 2055550125 .
2.2. Число С пробелами, Точками или Дефисами
Во втором примере давайте посмотрим, как мы можем разрешить необязательные пробелы, точки или дефисы (-) между числами:
@Test public void whenMatchesTenDigitsNumberWhitespacesDotHyphen_thenCorrect() < Pattern pattern = Pattern.compile("^(\\d[- .]?)\\d$"); Matcher matcher = pattern.matcher("202 555 0125"); assertTrue(matcher.matches()); >
Чтобы достичь этой дополнительной цели (необязательный пробел или дефис), мы просто добавили символы:
Этот шаблон позволит использовать такие числа, как 2055550125 , 202 555 0125 , 202.555.0125 , и 202-555-0125 .
2.3. Число В Круглых Скобках
Далее, давайте добавим возможность иметь первую часть нашего телефона между скобками :
@Test public void whenMatchesTenDigitsNumberParenthesis_thenCorrect() < Pattern pattern = Pattern.compile"^((\\(\\d\\))|\\d)[- .]?\\d[- .]?\\d$"); Matcher matcher = pattern.matcher("(202) 555-0125"); assertTrue(matcher.matches()); >
Чтобы разрешить необязательную скобку в числе, мы добавили следующие символы в наше регулярное выражение:
Это выражение позволит использовать такие числа, как (202)5550125 , (202) 555-0125 или (202)-555-0125 . Кроме того, это выражение также позволит использовать телефонные номера, описанные в предыдущем примере.
2.4. Номер С Международным Префиксом
Наконец, давайте посмотрим, как разрешить международный префикс в начале телефонного номера :
@Test public void whenMatchesTenDigitsNumberPrefix_thenCorrect() < Pattern pattern = Pattern.compile("^(\\+\\d( )?)?((\\(\\d\\))|\\d)[- .]?\\d[- .]?\\d$"); Matcher matcher = pattern.matcher("+111 (202) 555-0125"); assertTrue(matcher.matches()); >
Чтобы разрешить префикс в нашем номере, мы добавили в начало нашего шаблона символы:
Это выражение позволит телефонным номерам включать международные префиксы, принимая во внимание, что международные префиксы обычно представляют собой номера, содержащие не более трех цифр.
3. Применение Нескольких Регулярных Выражений
Как мы уже видели, действительный номер телефона может принимать несколько различных форматов. Поэтому мы можем захотеть проверить, соответствует ли наша строка | любому из этих форматов.
В последнем разделе мы начали с простого выражения и добавили больше сложности, чтобы достичь цели охвата более одного формата. Однако иногда невозможно использовать только одно выражение. В этом разделе мы увидим как объединить несколько регулярных выражений в одно .
Если мы не можем создать общее регулярное выражение, которое может проверить все возможные случаи, которые мы хотим охватить, мы можем определить различные выражения для каждого из случаев, а затем использовать их все вместе, объединив их с символом канала (|).
Давайте рассмотрим пример, в котором мы используем следующие выражения:
@Test public void whenMatchesPhoneNumber_thenCorrect() < String patterns = "^(\\+\\d( )?)?((\\(\\d\\))|\\d)[- .]?\\d[- .]?\\d$" + "|^(\\+\\d( )?)?(\\d[ ]?)\\d$" + "|^(\\+\\d( )?)?(\\d[ ]?)(\\d[ ]?)\\d$"; String[] validPhoneNumbers = ; Pattern pattern = Pattern.compile(patterns); for(String phoneNumber : validPhoneNumbers) < Matcher matcher = pattern.matcher(phoneNumber); assertTrue(matcher.matches()); >>
Как мы можем видеть в приведенном выше примере, используя символ трубы, мы можем использовать три выражения за один раз, что позволяет нам охватить больше случаев, чем с помощью одного регулярного выражения.
4. Заключение
В этой статье мы рассмотрели, как проверить, содержит ли строка допустимый номер телефона, используя различные регулярные выражения. Мы также научились использовать несколько регулярных выражений одновременно.
Как всегда, полный исходный код статьи доступен на GitHub .
Проверка телефонных номеров с помощью Java Regex
Иногда нам нужно проверить текст, чтобы убедиться, что его содержимое соответствует какому-то формату. В этом кратком руководстве мы увидим, как проверять различные форматы телефонных номеров с помощью регулярных выражений .
2. Регулярные выражения для проверки телефонных номеров
2.1. Десятизначное число
Давайте начнем с простого выражения, которое будет проверять, состоит ли число из десяти цифр и больше ничего :
@Test public void whenMatchesTenDigitsNumber_thenCorrect() Pattern pattern = Pattern.compile("^\\d$"); Matcher matcher = pattern.matcher("2055550125"); assertTrue(matcher.matches()); >
Это выражение позволит использовать такие числа, как 2055550125 .
2.2. Число с пробелами, точками или дефисами
Во втором примере давайте посмотрим, как мы можем разрешить необязательные пробелы, точки или дефисы (-) между числами:
@Test public void whenMatchesTenDigitsNumberWhitespacesDotHyphen_thenCorrect() Pattern pattern = Pattern.compile("^(\\d[- .]?)\\d$"); Matcher matcher = pattern.matcher("202 555 0125"); assertTrue(matcher.matches()); >
Для достижения этой дополнительной цели (необязательный пробел или дефис) мы просто добавили символы:
Этот шаблон позволит использовать такие номера, как 2055550125 , 202 555 0125 , 202.555.0125 и 202-555-0125 .
2.3. Число в скобках
Далее добавим возможность разместить первую часть нашего телефона в скобках :
@Test public void whenMatchesTenDigitsNumberParenthesis_thenCorrect() Pattern pattern = Pattern.compile"^((\\(\\d\\))|\\d)[- .]?\\d[- .]?\\d$"); Matcher matcher = pattern.matcher("(202) 555-0125"); assertTrue(matcher.matches()); >
Чтобы разрешить необязательные круглые скобки в числе, мы добавили в наше регулярное выражение следующие символы:
Это выражение позволит использовать такие числа, как (202)5550125 , (202) 555-0125 или (202)-555-0125 . Кроме того, это выражение также позволит использовать телефонные номера, описанные в предыдущем примере.
2.4. Номер с международным префиксом
Наконец, давайте посмотрим, как разрешить международный префикс в начале номера телефона :
@Test public void whenMatchesTenDigitsNumberPrefix_thenCorrect() Pattern pattern = Pattern.compile("^(\\+\\d( )?)?((\\(\\d\\))|\\d)[- .]?\\d[- .]?\\d$"); Matcher matcher = pattern.matcher("+111 (202) 555-0125"); assertTrue(matcher.matches()); >
Чтобы разрешить префикс в нашем номере, мы добавили в начало нашего шаблона символы:
Это выражение позволит телефонным номерам включать международные префиксы, принимая во внимание, что международные префиксы обычно представляют собой номера, состоящие не более чем из трех цифр.
3. Применение нескольких регулярных выражений
Как мы видели, действительный номер телефона может иметь несколько различных форматов. Поэтому мы можем захотеть проверить, соответствует ли наша строка любому из этих форматов.
В последнем разделе мы начали с простого выражения и усложнили его, чтобы достичь цели охвата более одного формата. Однако иногда невозможно использовать только одно выражение. В этом разделе мы увидим, как объединить несколько регулярных выражений в одно .
Если мы не можем создать общее регулярное выражение, которое может проверять все возможные случаи, которые мы хотим охватить, мы можем определить разные выражения для каждого из случаев, а затем использовать их все вместе, объединив их с помощью символа вертикальной черты (|).
Давайте посмотрим на пример, где мы используем следующие выражения:
- Выражение, использованное в последнем разделе:
- ^( \ + \ d( )?)?(( \ ( \ d \ ))| \ d) [- .] ? \ d < 3>[- .] ? \ d$
- Регулярное выражение, разрешающее такие номера, как +111 123 456 789:
- ^( \ + \ d( )?)?( \ d [ ] ?) \ d$
- Шаблон, позволяющий использовать такие номера, как +111 123 45 67 89:
- ^( \ + \ d( )?)?( \ d [ ] ?)( \ d [ ] ?) \ d$
@Test public void whenMatchesPhoneNumber_thenCorrect() String patterns = "^(\\+\\d( )?)?((\\(\\d\\))|\\d)[- .]?\\d[- .]?\\d$" + "|^(\\+\\d( )?)?(\\d[ ]?)\\d$" + "|^(\\+\\d( )?)?(\\d[ ]?)(\\d[ ]?)\\d$"; String[] validPhoneNumbers = "2055550125","202 555 0125", "(202) 555-0125", "+111 (202) 555-0125", "636 856 789", "+111 636 856 789", "636 85 67 89", "+111 636 85 67 89">; Pattern pattern = Pattern.compile(patterns); for(String phoneNumber : validPhoneNumbers) Matcher matcher = pattern.matcher(phoneNumber); assertTrue(matcher.matches()); > >
Как мы можем видеть в приведенном выше примере, используя символ вертикальной черты, мы можем использовать три выражения за один раз, что позволяет нам охватить больше случаев, чем с одним регулярным выражением.
4. Вывод
В этой статье мы увидели, как проверить, содержит ли строка действительный номер телефона, используя различные регулярные выражения. Мы также научились использовать несколько регулярных выражений одновременно.
Как всегда, полный исходный код статьи доступен на GitHub .
Регулярные выражения Java: проверяем номер телефона
В этом уроке мы рассмотрим, как проверить номер телефона в Java с помощью регулярных выражений (RegEx).
Телефонные номера трудно проверить. Разные страны имеют разные форматы, а некоторые страны даже используют несколько форматов и кодов стран.
Чтобы проверить номер телефона с помощью регулярных выражений, вам придется написать пару утверждений.
Эти утверждения зависят от вашего проекта, его локализации и стран, в которых вы хотите его применить.
Для стандартной проверки номера телефона в США мы можем использовать длинное, довольно надежное выражение:
4 группы в выражении соответствуют коду страны, номеру региона, номеру абонента и добавочному номеру.
123-456-7890 (123) 456-7890 etc.
Вы можете написать другое выражение, введя набор правил для групп (в зависимости от страны) и форматов.
Pattern simplePattern = Pattern.compile("^\\+\\d$"); Pattern robustPattern = Pattern.compile("^(\\+\\d\\s)?\\(?\\d\\)?[\\s.-]?\\d[\\s.-]?\\d$"); String phoneNumber = "+12 345 678 9012"; Matcher simpleMatcher = simplePattern.matcher(phoneNumber); Matcher robustMatcher = robustPattern.matcher(phoneNumber); if (simpleMatcher.matches()) < System.out.println(String.format("Simple Pattern matched for string: %s", phoneNumber)); >if(robustMatcher.matches())
Robust Pattern matched for string: +12 345 678 9012
Совпадения здесь могли бы соответствовать нескольким форматам:
Pattern robustPattern = Pattern.compile("^(\\+\\d\\s)?\\(?\\d\\)?[\\s.-]?\\d[\\s.-]?\\d$"); List phoneNumbers = List.of( "+12 345 678 9012", "+123456789012", "345.678.9012", "345 678 9012" ); for (String number : phoneNumbers) < Matcher matcher = robustPattern.matcher(number); if(matcher.matches()) < System.out.println(String.format("Robust Pattern matched for string: %s", number)); >>
Robust Pattern matched for string: +12 345 678 9012 Robust Pattern matched for string: 345.678.9012 Robust Pattern matched for string: 345 678 9012
Объединяем несколько регулярных выражений
Вместо единого универсального надежного регулярного выражения, охватывающего все крайние случаи, страны и т.д., вы можете выбрать несколько различных шаблонов, которые будут охватывать входящие телефонные номера. Чтобы упростить задачу – вы можете связать эти выражения с помощью оператора | , чтобы проверить, соответствует ли номер телефона какому-либо из шаблонов:
Pattern robustPattern = Pattern .compile( // Robust expression from before "^(\\+\\d\\s)?\\(?\\d\\)?[\\s.-]?\\d[\\s.-]?\\d$" // Area code, within or without parentheses, // followed by groups of 3-4 numbers with or without hyphens + "| ((\\(\\d\\) ?)|(\\d-))?\\d-\\d" // (+) followed by 10-12 numbers + "|^\\+\\d" ); List phoneNumbers = List.of( "+12 345 678 9012", "+123456789012", "345.678.9012", "345 678 9012" ); for (String number : phoneNumbers) < Matcher matcher = robustPattern.matcher(number); if(matcher.matches()) < System.out.println(String.format("Pattern matched for string: %s", number)); >>
Pattern matched for string: +12 345 678 9012 Pattern matched for string: +123456789012 Pattern matched for string: 345.678.9012 Pattern matched for string: 345 678 9012
Регулярные выражения могут решить проблему проверки телефонных номеров, но это сложно.
Некоторые страны придерживаются разных стандартов, в то время как некоторые страны принимают и используют несколько форматов одновременно. Это затрудняет написание выражения общего назначения для универсального соответствия телефонным номерам.
В этой статье мы рассмотрели, как сопоставлять телефонные номера с регулярными выражениями в Java, используя несколько различных выражений.