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

时间:2017-05-19 10:41:27

标签: html regex firefox abide foundation-abide

这与此问题存在同样的问题:

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

<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
  • A-Z
  • A-Z

以及空白,撇号和连字符。快速搜索看到它的\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFa部分被广泛用于各种正则表达式。我只是没有看到使用的确切内容而不是转义的unicode字符引用。

1 个答案:

答案 0 :(得分:2)

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

请注意,在常规的HTML5 pattern字段中,不必在模式的开头/结尾使用^$个锚点,因为HTML5 pattern attribute包含了传递的内容^(?:)$的模式。 ,根据您的反馈, Abide 验证可以绕过此并将 unanchored 模式传递给正则表达式引擎。因此,你应该保留锚点。

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

快速演示:

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