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

этот вопрос уже есть ответ здесь:

Я использую Clickatell для отправки SMSes на мобильные телефоны клиентов.

существует ли стандартизированное регулярное выражение для всех действительных номеров мобильных телефонов, например +27 123 4567? Я бы ролл мой собственный, но я беспокоюсь о том, чтобы пропустить неясный, действительный формат номера телефона.

6 ответов


после удаления всех символов, кроме " + " и цифр с вашего ввода, это должно сделать это:

^\+[1-9]{1}[0-9]{3,14}$

Если вы хотите быть более точным с кодами стран видят этот вопрос на список телефонных кодов стран

однако я бы постарался быть не слишком строгим с моей проверкой. Пользователи очень расстраиваются, если им говорят, что их действительные номера неприемлемы.


даже если вы пишете регулярное выражение, которое точно соответствует подмножеству "действительные номера телефонов" из строк, нет никакого способа гарантировать (посредством регулярного выражения), что они действительны мобильный телефонные номера. В нескольких странах номера мобильных телефонов неотличимы от номеров стационарных телефонов без поиска по крайней мере плана номеров, а в некоторых случаях даже это не поможет. Например, в Швеции многие люди "портировали" свои обычные стационарные телефоны номер их мобильного телефона. Это все тот же номер, что и раньше, но теперь он переходит на мобильный телефон вместо стационарного.

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


^\+[1-9]{1}[0-9]{7,11}$ 

Регулярное Выражение ^\+[1-9]{1}[0-9]{7,11}$ сбой для "+290 8000 " и аналогичных допустимых чисел, которые короче 8 цифр.

самые длинные номера могут быть чем-то вроде 3-значного кода страны, 3-значного кода области, 8-значного абонентского номера, что составляет 14 цифр.


хотя речь идет о международных числах, я бы хотел, чтобы код был таким :

/^(\+|\d)[0-9]{7,16}$/;

Как вы можете иметь международные номера, начинающиеся с "00", а также.

почему я предпочитаю 15 цифр:http://en.wikipedia.org/wiki/E.164


размещение заметки здесь для пользователей, рассматривающих это в будущем. Google libphonenumber Это то, что вы скорее всего хотели бы использовать. Есть обертки для PHP, node.js, Java и т. д. чтобы использовать данные, которые Google собирает и уменьшает требования для поддержания больших массивов шаблонов регулярных выражений для применения.


/ / Regex-Проверьте Сингапур действительные мобильные номера

public static boolean isSingaporeMobileNo(String str) {
    Pattern mobNO = Pattern.compile("^(((0|((\+)?65([- ])?))|((\((\+)?65\)([- ])?)))?[8-9]\d{7})?$");
    Matcher matcher = mobNO.matcher(str);
    if (matcher.find()) {
        return true;
    } else {
        return false;
    }
}