Как создать выражение регулярного выражения для 10-значного телефонного номера с тем же разделителем?

#regex

Вопрос:

Я пытаюсь создать базовое регулярное выражение, соответствующее номеру телефона, в котором в качестве разделителя могут использоваться точки [.] или дефисы [ -]. Формат 123.456.7890 или 123-456-7890. Выражение, которое я сейчас использую, таково:

 ddd[-.]ddd[-.]dddd
 

Проблема здесь в том, что он также соответствует телефонным номерам, в которых есть оба разделителя, которые я хочу назвать недействительными/не совпадающими. Например, с моим выражением 123.456-7890 и 123-456.7890 отображаются как совпадение, чего я не хочу.
Есть ли способ сделать это?

Ответ №1:

Используйте обратную ссылку:

 ^d{3}([.-])d{3}1d{4}$
 

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

 ^       from the start of the number
d{3}   match any 3 digits
([.-])  then match AND capture either a dot or a dash separator
d{3}   match any 3 digits
1      match the SAME separator seen earlier
d{4}   match any 4 digits
$       end of the number 
 

Ответ №2:

Вы можете использовать это регулярное выражение:

 ^d{3}([-.])d{3}1d{4}$
 

Вы можете видеть, что это работает здесь.

Ключевой момент здесь — это то, что вы фиксируете желаемый символ с помощью скобок ([-.])

а затем повторно используйте его с обратной ссылкой 1 .