为什么和我得到:"无效的正则表达式。未捕获的SyntaxError。转义无效。"?

时间:2016-11-21 15:30:38

标签: regex syntax-error

我试图创建一个html输入标记,只接受以2种格式之一输入的数字,并拒绝所有其他输入。

我想接受这些格式的数字,包括要求破折号:

1234-12

1234-12-12

注意:这不是日期,而是法律章节号

我正在阅读的有关正则表达式的所有内容都说以下内容应该有效,但它不是。

<input class="form-control"
                       type="text"
                       pattern="^(\d{4}\-\d{2}\-\d{2})|(\d{4}\-\d{2})$"
                       required />

Chrome中的Devtools控制台错误:

  

模式属性值^(\d{4}\-\d{2}\-\d{2})|(\d{4}\-\d{2})$不是有效的正则表达式:Uncaught SyntaxError:无效的正则表达式:/ ^(\ d {4} - \ d {2} - \ d {2})|(\ d {4} - \ d {2})$ /:转义无效

1 个答案:

答案 0 :(得分:3)

你不应该转义与u标志一起使用的ES6正则表达式中的字符类之外的连字符(当前版本的pattern regexp中默认使用的标记。 Chrome和FF)。

此外,默认情况下,模式属性中的正则表达式已锚定,删除重复项^$并使用可选组缩短模式

pattern="\d{4}-\d{2}(-\d{2})?"

HTML5 pattern属性中的此正则表达式表示:

  • \d{4}-\d{2} - 匹配4位数字-,然后匹配字符串开头的2位数字
  • (-\d{2})? - 并且可选地匹配字符串末尾的-和2位数字。