Это решение фактически проверяет числа и формат. Например: 123-456-7890 является допустимым форматом, но НЕ является действительным номером США , и этот ответ подтверждает то, чего нет у других.
Если вы не хотите расширять возможности, удалите следующее, включая скобки:
(?: \ S * (?.? # | Х | доб | расширение) \ S * (\ d +) \ s *.?)? :)
edit (приложение) Мне это нужно было только в приложении на стороне клиента, поэтому я преобразовал его. Вот это для людей Javascript:
var myPhoneRegex = /(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$/i;
if (myPhoneRegex.test(phoneVar)) {
// Successful match
} else {
// Match attempt failed
}
НТН.
конец редактирования
Это позволяет расширения или нет и работает с .NET
(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$
Для проверки с пробелами или без них. Возможно, при использовании валидаторов .NET и обрезки на стороне сервера используйте это немного другое регулярное выражение:
(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$
Все действующие:
1 800 5551212
800 555 1212
8005551212
18005551212
+ 1800 555 1212 добавочный65432
800 5551212 ext3333
Invalid # s
234-911-5678
314-159-2653
123-234-5678
РЕДАКТИРОВАТЬ: На основе комментария Фелипе я обновил это для международного.
На основании того, что я мог узнать из здесь и здесь относительно действительных глобальных чисел
Это проверено как первая линия защиты, конечно. Главным элементом международного номера является то, что он не длиннее 15 символов. Я не написал замену для всех не цифр и суммировал результат. Это должно быть сделано для полноты. Кроме того, вы можете заметить, что Я не комбинировал регулярное выражение Северной Америки с этим. Причина в том, что это международное регулярное выражение будет соответствовать номерам в Северной Америке, однако он также будет принимать известные недействительные #
такие как +1 234-911-5678
. Для более точных результатов вы также должны разделить их.
Паузы и другие инструменты набора номера не упоминаются и поэтому недействительны согласно E.164
\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?
С 1-10-буквенным словом для расширения и 1-6-значным расширением:
\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})? ?(\w{1,10}\s?\d{1,6})?
Действительный международный: название страны для ссылки не совпадает.
+ 55 11 99999-5555 Бразилия
+ 593 7 282-3889 Эквадор
(+ 44) 0848 9123 456 Великобритания
+ 1 284 852 5500 БВО
+ 1 345 9490088 Большой Кайман
+ 32 2 702-9200 Бельгия
+ 65 6511 9266 Азиатско-Тихоокеанский регион
+ 86 21 2230 1000 Шанхай
+ 9124 4723300 Индия
+ 821012345678 Южная Корея
И для вашего удовольствия
+ 55 11 99999-5555 Рамал 123 Бразилия
+ 55 11 99999-5555 foo786544 Бразилия
Наслаждайтесь