Выражение регулярного выражения для обнаружения ошибок номера телефона с URL, который имеет номера - PullRequest
0 голосов
/ 07 января 2020

У меня есть следующее регулярное выражение

\(?(\+|0+)?\d{1,}\)?[- \.]?(\(\d+\))?[- \.]?\d{2,}[. -]? ?\d{2,}[ -\.]? ?\d{2,}

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

34565464
+93483227359
111-123-4567
+934-83227359
(111)123-4567
+1703.338.6512
+1 703 335 65123
001 (703) 332-6261 
Number: (111)123-4567

, и оно прекрасно работает, за исключением того факта, что путает URL-адреса, такие как:

https://www.google.com/search?q= 233066908

Как изменить выражение, чтобы игнорировать URL-адреса?

Ответы [ 2 ]

1 голос
/ 07 января 2020

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

Если вам не нужны группы захвата для дальнейшей обработки, вы можете сделать их не захватывающими (?: и обратите внимание, что вам не нужно экранировать точку в классе символов.

(?<!\S)\(?(?:\+|0+)?\d+\)?[- .]?(?:\(\d+\))?[- .]?\d{2,}[. -]? ?\d{2,}[ -.]? ?\d{2,}\b

Regex demo

0 голосов
/ 07 января 2020

Вы можете попробовать это:

https?:\/\/.+|(\d{1,}\)?[- \.]?(\(\d+\))?[- \.]?\d{2,}[. -]? ?\d{2,}[ -\.]? ?\d{2,})

Хитрость заключается в том, чтобы считать группу захвата полным совпадением, если http(s):// не содержится в проанализированной строке (шаблон ie. not "this"|(this)) и игнорировать совпадения, когда нет группы захвата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...