#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
.