3

这与此问题相同的问题有关:

Firefox 错误:无法检查输入,因为该模式不是有效的正则表达式:正则表达式中的身份转义无效

<input>模式属性中使用转义字符时,Firefox 会向控制台抛出以下错误:

无法检查<input pattern='^[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFa-zA-Z\s\'-]{1,50}$'> ,因为模式不是有效的正则表达式:正则表达式中的无效身份转义

因此,当在字段上使用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
  • 阿兹
  • AZ

以及空格、撇号和连字符。快速搜索会发现\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFa它的一部分相当广泛地用于各种正则表达式。我只是不知道使用什么来代替这里的转义 unicode 字符引用。

4

1 回答 1

3

您需要删除单引号之前的转义反斜杠。

请注意,在常规 HTML5pattern字段中,不必在模式开始/结束处使用^和锚点,因为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>

于 2017-05-19T10:47:19.323 回答