Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

Если вы хотите уточнить код страны, см. этот вопрос на Список кодов стран с номерами телефонов

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

Даже если речь идет о международных номерах, я бы хотел, чтобы код выглядел следующим образом:

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

Как вы можете получить международные номера, начиная с '00'.

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

Ответ 5

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

Ответ 6

//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;
    }
}