Firefox 输入模式正则表达式范围

Firefox input pattern regex range

这与这个问题的问题相同:

Firefox error: Unable to check input because the pattern is not a valid regexp: invalid identity escape in regular expression

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

Unable to check <input pattern='^[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFa-zA-Z\s\'-]{1,50}$'> because the pattern is not a valid regexp: invalid identity escape in regular expression

因此,在 <input> 字段上使用 pattern 属性时,不再需要对 unicode 字符进行转义。在那种情况下,用户只需停止转义他们的字符并将 \@\% 更改为 @%,问题就解决了。

我有这个更复杂的正则表达式模式,我该如何将其更改为在 Firefox 中工作?

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

基本上它允许任何长度在 1..50 个字符之间的字符串,只要所有字符都在这些范围内:

以及空格、撇号和连字符。快速搜索可以看到它的 \u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFa 部分在各种正则表达式中得到了相当广泛的应用。我只是看不出究竟要使用什么来代替转义的 unicode 字符引用。

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

请注意,在常规 HTML5 pattern 字段中,不必在模式 start/end 处使用 ^$ 锚作为HTML5 pattern attribute^(?:)$ 将传递的模式括起来。 但是,根据您的反馈,Abide 验证绕过这一点并将 unanchored 模式传递给正则表达式引擎.因此,你应该保留锚点。

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