Регулярное выражение для нахождения номеров телефона [дубликат]

8
задан Community 23 May 2017 в 12:31
поделиться

4 ответа

^ (\ (? \ D {3} \)?) ([.-]) (\ d {3}) ([.-] ) (\ d {4}) $

Это должно соответствовать всем шаблонам, кроме последнего. Для последнего вы можете использовать разделенный шаблон ^ \ d {10} $

И есть ошибка, он будет соответствовать (123 456 7899

  1. ^ (\ (? \ d {3} \)?) , если мы нарушим этот код, первый символ ( ^ ) совпадает с началом текста. \ (? and \)? будет принимать или не принимать этот символ, существует проблема, с которой вы должны проверить, есть ли там был открывающим символом, если бы второе должно было совпадать, я не знаю, возможно ли это с использованием только Regex. И \ d {3} будет соответствовать трем числам

  2. ([.- ]) будет соответствовать любому из них, но только одному и только один раз.

  3. (\ d {3}) будет соответствовать трем числам

  4. То же, что 2

  5. (\ d {4}) $ четырем числам, за которыми следует конец текста ( $ )

Поскольку вы хотите извлечь из HTML-страницы, вам придется игнорировать ^ и $ , чтобы сопоставить любую часть текста, и установить флаг ] global , в javascript / exp / g

Вы можете протестировать Regex здесь

1
ответ дан 5 December 2019 в 12:56
поделиться

/^[\.-)( ]*([0-9]{3})[\.-)( ]*([0-9]{3})[\.-)( ]*([0-9]{4})$/

Должно получиться то, что вы пытаетесь сделать.

Первая часть ^ означает "начало строки", что заставит его учитывать всю строку.

Части [\.-)( ]*, которые у меня там есть, означают "любая точка, дефис, скобка или пробел, встречающиеся 0 или более раз".

Кластеры ([0-9]{3}) соответствуют группе из 3 чисел (последний установлен на соответствие 4)

Надеюсь, это поможет!

7
ответ дан 5 December 2019 в 12:56
поделиться

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

Это должно соответствовать всем вашим группам с очень малым количеством ложных срабатываний:

/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/

Группы, которые вас будут интересовать после совпадения, это группы 1, 3 и 4. Группа 2 существует только для того, чтобы убедиться, что первый и второй символы-разделители , . , или - одинаковы.

Например, команда sed для удаления символов и оставления телефонных номеров в виде 123456789:

sed "s/(\{0,1\}\([0-9]\{3\}\))\{0,1\}\([ .-]\{0,1\}\)\([0-9]\{3\}\)\2\([0-9]\{4\}\)/\1\3\4/"

Вот ложные срабатывания моего выражения:

  • (123)456789
  • (123456789
  • (123 456 789
  • (123.456.789
  • (123-456-789
  • 123)456789
  • 123) 456 789
  • 123). 456.789
  • 123)-456-789

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

/\(([0-9]{3})\)([ .-]?)([0-9]{3})\2([0-9]{4})|([0-9]{3})([ .-]?)([0-9]{3})\5([0-9]{4})/

В этом случае важны группы 1, 3 и 4 или 5, 7 и 8.

4
ответ дан 5 December 2019 в 12:56
поделиться

Это поможет вам поймать те, у которых код города указан в скобках

([0-9]\{3\})[ .-][0-9]\{3\}[ .-][0-9]\{4\}

Остальные:

[0-9]\{3\}[ -][0-9]\{3\}[ -][0-9]\{4\}
[0-9]\{10\}

Я разделил первое и второе, потому что если их соединить вместе без обратного пути, вы можете принять (123 456 7890 или 123) 456 7890

Заметьте также, что на моем терминале, используя grep, я должен был избежать { } для повторения. Вы можете этого не делать, или вам придется экранировать другие символы, в зависимости от того, где вы собираетесь это использовать.

1
ответ дан 5 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: