2015-10-20 2 views
0

Я пытаюсь применить формулу проверки данных к столбцу, проверяя, является ли контент действительным международным телефонным номером. Проблема в том, что я не могу иметь +1 или +some dial code, потому что он интерпретируется как оператор. Поэтому я ищу регулярное выражение, которое принимает все это с кодом набора в скобках:Проверка международных телефонных номеров с помощью REGEXMATCH

(+1)-234-567-8901 
(+61)-234-567-89-01 
(+46)-234 5678901 
(+1) (234) 56 89 901 
(+1) (234) 56-89 901 
(+46).234.567.8901 
(+1)/234/567/8901 

Исходное регулярное выражение может быть this один (где я также принял примеры).

ответ

0

Это регулярное выражение соответствует всем пример вы дали нам (проверено https://fr.functions-online.com/preg_match_all.html)

/^\(\+\d+\)[\/\. \-]\(?\d{3}\)?[\/\. \-][\d\- \.\/]{7,11}$/m 
  1. ^ Match начало строки или новой строки.

  2. Чтобы соответствовать (+1) и (+61): \(\+\d+\): Знак плюс и круглые скобки должны быть экранированы, так как они имеют особое значение в регулярном выражении. \d+ Подставка для любых цифр (\d) характер и означает плюс один или более (плюс можно заменить {1,2})

  3. [\/\. \-] Этот матч точка, пробел, слэш и дефис ровно один раз.

  4. \(?\d{3}\)?: знак вопроса предназначен для необязательной круглой скобки (? = 0 или 1 раз). Он ожидает три цифры.

  5. [\/\. \-] же, как на стадии 3

  6. [\d\- \.\/]{7,11}: Ожидать цифры, дефис, пробел, точку или косую черту между 7 и 11 раз.

  7. $ Матч конец строки или конец строки

  8. m модификатор позволяет каретку (^) и знак доллара ($) комбинацию, чтобы соответствовать разрыв строки. Удалите это, если вы хотите, чтобы этот символ соответствовал только началу и концу строки.

  9. Разрезы - это разделитель для этого регулярного выражения (есть и другие символы, которые вы можете использовать).

Должен признаться, мне не нравится последняя часть регулярного выражения, так как не гарантирую, что у вас есть как минимум 7 цифр.

Было бы, вероятно, лучше, чтобы удалить все разделитель (на примере с PHP функции str_replace) и иметь дело только с скобкой и числом с этим регулярным выражением

/(\(\+\d+\))(\(?\d{3}\)?)(\d{3})(\d{4})/m 

Обратите внимание, что в последнем регулярном выражении я использовал 4 захвата группы для соответствия четырехзначной части номера телефона. Это регулярное выражение хранит скобки и знак плюса первой группы и необязательную скобку второй группы.Для того, чтобы оставить только цифры группы, вы можете использовать это регулярное выражение:

/\(\+(\d+)\)\(?(\d{3})\)?(\d{3})(\d{4})/m 

Примечания: Эти группы для форматирования номера телефона после проверки его. Вероятно, вам лучше сохранить весь свой номер телефона в своей базе данных в том же формате.

Ну, вот иная возможность, которую вы можете использовать.

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

К примеру, внешний вид не поддерживается javascript и .Net, что позволяет использовать более мощный контроль над lookbehind, чем PHP.

Держите меня в курсе, если вам нужна дополнительная информация

Смежные вопросы