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

Ste*_*ler 10 regex firefox html5 escaping

我正在使用正则表达式模式匹配HTML5表单验证.最新版本的Firefox给我一个错误.我才开始在Firefox 46中看到这一点.我认为这不是早期Firefox版本中的问题.

无法检查,<input pattern='[\@\%]'>因为该模式不是有效的正则表达式:正则表达式中的无效标识转义

由这个非常简单的测试用例引起的:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
  </head>
  <form>
    <input pattern="[\@\%]">
  </form>
</html>
Run Code Online (Sandbox Code Playgroud)

为什么将这些字符转义为错误?我总是在正则表达式中逃避所有不是数字或字母的内容.除了这个版本的Firefox,我从来没有抱怨过这种类型的转义字符.

当我学习正则表达式时,我被告知所有不是数字或字母的东西都可能具有特殊意义.即使它现在没有,它可能在未来的版本中,所以最好逃避它们.这不是真的吗?

是否有我不应该为Firefox逃脱的字符列表?

小智 10

这是由于以下更改:错误 1227906 - HTMLpattern属性应u为正则表达式设置标志

正如有人已经说过的那样,您不必逃避这些字符。只需使用:

<input pattern="[@%]">
Run Code Online (Sandbox Code Playgroud)

  • @StephenOstermiller [不必要](https://mathiasbynens.be/notes/es6-unicode-regex#impact-syntax)来逃避它们,那你为什么要这么做呢?在 `u` 模式中抛出不必要的转义的原因是,规范稍后可以为其中一些转义赋予特殊含义,例如 `\p` 和 `\P`。如果“\p”相当于“p”,那么这将是向后不兼容的更改。 (2认同)