Какое регулярное выражение будет соответствовать действительным международным телефонным номерам? - PullRequest
92 голосов
/ 22 января 2010

Мне нужно определить, является ли номер телефона действительным, прежде чем пытаться набрать его. Телефонный звонок может идти в любую точку мира.

Какое регулярное выражение будет соответствовать действительным международным телефонным номерам?

Ответы [ 21 ]

1 голос
/ 25 июня 2017

Вот регулярное выражение для следующих наиболее распространенных сценариев телефонных номеров. Хотя это с учетом перспективы США для кодов регионов, это работает для международных сценариев.

  1. Фактический номер должен состоять только из 10 цифр.
  2. Для номеров США код города может быть заключен в скобки ().
  3. Код страны может содержать от 1 до 3 цифр. При желании может предшествовать знак +.
  4. Между кодом страны, кодом города и остальной частью номера могут быть тире, пробелы, точки или не должно быть пробелов.
  5. Действительный номер телефона не может содержать все нули.

    ^(?!\b(0)\1+\b)(\+?\d{1,3}[. -]?)?\(?\d{3}\)?([. -]?)\d{3}\3\d{4}$
    

Объяснение:

    ^ - start of expression  
    (?!\b(0)\1+\b) - (?!)Negative Look ahead. \b - word boundary around a '0' character. \1 backtrack to previous capturing group (zero). Basically don't match all zeros.  
    (\+?\d{1,3}[. -]?)? - '\+?' plus sign before country code is optional.\d{1,3} - country code can be 1 to 3 digits long. '[. -]?' - spaces,dots and dashes are optional. The last question mark is to make country code optional.  
    \(?\d{3}\)? - '\)?' is to make parentheses optional. \d{3} - match 3 digit area code.  
    ([. -]?) - optional space, dash or dot
    $ - end of expression

Дополнительные примеры и объяснения - https://regex101.com/r/hTH8Ct/2/

1 голос
/ 11 ноября 2015

Простая версия для европейских чисел, которая соответствует числам вроде 0034617393211, но также и длинным, например 004401484172842.

^0{2}[0-9]{11,}

Надеюсь, это поможет: ·)

1 голос
/ 31 октября 2016
public static boolean validateInternationalPhoneNumberFormat(String phone) {
    StringBuilder sb = new StringBuilder(200);

    // Country code
    sb.append("^(\\+{1}[\\d]{1,3})?");

    // Area code, with or without parentheses
    sb.append("([\\s])?(([\\(]{1}[\\d]{2,3}[\\)]{1}[\\s]?)|([\\d]{2,3}[\\s]?))?");

    // Phone number separator can be "-", "." or " "

    // Minimum of 5 digits (for fixed line phones in Solomon Islands)
    sb.append("\\d[\\-\\.\\s]?\\d[\\-\\.\\s]?\\d[\\-\\.\\s]?\\d[\\-\\.\\s]?\\d[\\-\\.\\s]?");

    // 4 more optional digits
    sb.append("\\d?[\\-\\.\\s]?\\d?[\\-\\.\\s]?\\d?[\\-\\.\\s]?\\d?$");

    return Pattern.compile(sb.toString()).matcher(phone).find();
}
0 голосов
/ 22 октября 2018

Попробуйте, у меня все работает.

^(00|\+)[1-9]{1}([0-9][\s]*){9,16}$
0 голосов
/ 05 марта 2018

Попробуйте следующий API для проверки номера телефона. Также это вернет страну, область и поставщика

демо https://libphonenumber.appspot.com/

мерзавец https://github.com/googlei18n/libphonenumber/releases/tag/v8.9.0

0 голосов
/ 14 октября 2017

Несмотря на то, что на самом деле RegExp не используется для выполнения работы - или, может быть, из-за этого - для меня это выглядит хорошим решением: https://intl -tel-input.com / node_modules / intl-tel -input / примеры / GEN / вне-Валид-number.html

0 голосов
/ 18 августа 2017

Я использовал это ниже:

^(\+|00)[0-9]{1,3}[0-9]{4,14}(?:x.+)?$

Формат + CCC.NNNNNNNNNNxEEEE или 00CCC.NNNNNNNNNNxEEEE

Номер телефона должен начинаться с «+» или «00» для международного звонка. где C - 1-3-значный код страны,

N - до 14 цифр,

и E является (необязательным) расширением.

Требуется начальный знак плюс и точка после кода страны. Буквенный символ «x» требуется только в том случае, если предусмотрено расширение.

0 голосов
/ 25 марта 2017

Это работает для меня без префикса 00, 001, 0011 и т. Д., Хотя:

/^\+*(\d{3})*[0-9,\-]{8,}/
0 голосов
/ 25 сентября 2016

Попробуйте, я не знаю, есть ли номер телефона длиннее 12:

^(00|\+){1}\d{12}$
0 голосов
/ 07 июня 2016

Это выражение Regex работает для телефонных номеров Индии, Канады, Европы, Новой Зеландии, Австралии, США и их кодов стран:

"^(\+(([0-9]){1,2})[-.])?((((([0-9]){2,3})[-.]){1,2}([0-9]{4,10}))|([0-9]{10}))$"

...