Im пытается создать тег ввода html, который принимает только числа, введенные в 1 из 2 форматов, и отклоняет все другие входные данные.Почему и я получаю: «Недопустимое регулярное выражение. Неиспользуемый SyntaxError. Invalid escape.»?
Я хочу принять номера только в этих форматах, в том числе требующих черточки:
1234-12
и
1234-12-12
Примечание: это не даты, а юридические номера глав
Все, что я читаю о регулярном выражении, говорит, что следующее должно работать, но это не так.
<input class="form-control"
type="text"
pattern="^(\d{4}\-\d{2}\-\d{2})|(\d{4}\-\d{2})$"
required />
Devtools Консоль ошибок в Chrome:
Pattern attribute value
^(\d{4}\-\d{2}\-\d{2})|(\d{4}\-\d{2})$
is not a valid regular expression: Uncaught SyntaxError: Invalid regular expression: /^(\d{4}-\d{2}-\d{2})|(\d{4}-\d{2})$/: Invalid escape
Замените '\ -' на' -'. –
Вы получаете «недействительный escape», потому что у вас есть недействительный escape в вашем регулярном выражении. Вне класса символов ('[]') '-' не имеет особого значения. Таким образом '\ -' является недействительным. –
@ T.J.Crowder: Я думаю, что запутанная часть здесь состоит в том, что '/ \ - /' является законным регулярным выражением в JS, а '/ \ -/u' - нет. Обычно (т. Е. Почти везде) идентификационные экраны не являются ошибкой, но разрешены, хотя и строго не нужны. – Joey