Диапазон регулярных выражений шаблонов ввода Firefox

Это связано с той же проблемой, что и этот вопрос:

Ошибка Firefox: Невозможно проверить входные данные, поскольку шаблон не является допустимым регулярным выражением: недопустимый сброс идентификатора в регулярном выражении

При использовании экранированных символов в <input> Атрибут pattern Firefox выдает эти ошибки в консоль:

Невозможно проверить <input pattern='^[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFa-zA-Z\s\'-]{1,50}$'> потому что шаблон не является допустимым регулярным выражением: недопустимый escape-идентификатор в регулярном выражении

Так что при использовании pattern атрибут на <input> поле, символы Unicode больше не нужно экранировать. В этом случае пользователь просто должен прекратить экранирование своих персонажей и изменить \@\% в @%, задача решена.

У меня есть несколько более сложный шаблон регулярных выражений, что мне поменять на работу в Firefox?

<input type="text" pattern="^[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFa-zA-Z\s\'-]{1,50}$">

По сути, он допускает любую строку длиной от 1,50 символов, если все символы находятся в следующих диапазонах:

  • \ U00A0- \ uD7FF
  • \ UF900- \ uFDCF
  • \ UFDF0-\uFFEF
  • Аризона
  • Аризона

а также пробелы, апострофы и дефисы. Быстрый поиск видит \u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFa часть его довольно широко используется во всевозможных регулярных выражениях. Я просто не вижу, что именно использовать вместо ссылок на экранированные символы Юникода.

1 ответ

Решение

Вы должны удалить обратную косую черту перед одинарной кавычкой.

Обратите внимание, что в обычном HTML5 pattern поле, не нужно использовать ^ а также $ привязывает начало / конец шаблона, так как атрибут шаблона HTML5 заключает в себе переданный шаблон с ^(?: а также )$, Однако, согласно вашим отзывам, проверка Abide обходит это и передает незафиксированный шаблон в механизм регулярных выражений. Таким образом, вы должны оставить якоря.

<input type="text" pattern="^[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFa-zA-Z\s'-]{1,50}$">

Небольшая демонстрация:

<form>
  <input type="text" pattern="[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFa-zA-Z\s'-]{1,50}">
  <input type="submit">
</form>

Другие вопросы по тегам