Regex для сопоставления определенного количества цифр
Следующее regex будет соответствовать диапазону 9-11 цифр: /\d{9,11}/
Каков наилучший способ написать регулярное выражение, соответствующее точно 9 или 11 цифрам (исключая 10)?
Используя атрибут pattern входного элемента, регулярное выражение должно соответствовать всему значению поля ввода. Я хочу принять любое число, содержащее 9 или 11 цифр.
Ответы
Ответ 1
Хорошо, вы могли бы попробовать что-то вроде:
^\d{9}(\d{2})?$
Это соответствует ровно девяти цифрам, за которыми следуют дополнительные двухзначные цифры (например, 9 или 11 цифр).
В качестве альтернативы,
^(\d{9}|\d{11})$
может работать.
Но помните, что не все обязательно должно выполняться с помощью регулярных выражений. Также легко проверить соответствие строк ^\d*$
и что сама длина строки равна 9 или 11 (например, с помощью strlen
).
Ответ 2
Это регулярное выражение будет делать
^(\d{9}|\d{11})$
или если вы не хотите точно соответствовать ему
\D(\d{9}|\d{11})\D
Ответ 3
/[^\d](\d{9}|\d{11})[^\d]/
В зависимости от того, какой инструмент вы используете, вам может потребоваться избежать символов (, | и).
Обратите внимание, что для того, чтобы не совпадать с 8 или любым другим числом, отличным от 9 или 11, регулярное выражение должно быть ограничено чем-то, чтобы указать, что совпадение окружено несимметричными символами. В идеале это был бы какой-то тип слова-границы, но синтаксис для этого был бы различным в зависимости от инструмента.
/\b(\d{9}|\d{11})\b/
работает с некоторыми инструментами. С чем вы работаете?