RegEx для действительного международного номера мобильного телефона
Я использую Clickatell для отправки SMS-сообщений на мобильные телефоны клиентов.
Существует ли стандартное регулярное выражение для всех действительных номеров мобильных телефонов, например. +27 123 4567? Я бы бросил свой собственный, но я беспокоюсь о том, чтобы пропустить неясный, действительный формат номера телефона.
Ответы
Ответ 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;
}
}