【发布时间】:2016-11-21 15:30:37
【问题描述】:
我正在尝试创建一个 html 输入标记,它只接受以 2 种格式中的 1 种格式输入的数字,并拒绝所有其他输入。
我只想接受这些格式的数字,包括需要破折号:
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})$不是有效的正则表达式:未捕获的语法错误:无效的正则表达式:/^(\d{4}-\d{2}-\d{2})|(\d{4 }-\d{2})$/: 无效转义
【问题讨论】:
-
将
\-替换为-。 -
您收到“无效转义”,因为您的正则表达式中有无效转义。在字符类 (
[]) 之外,-没有特殊含义。所以\-是无效的转义。 -
@T.J.Crowder:我认为这里令人困惑的部分是
/\-/是 JS 中的合法正则表达式,而/\-/u不是。通常(即几乎无处不在)身份转义不是错误,而是允许的,尽管严格来说不是必需的。
标签: regex syntax-error