我试图创建一个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})$ /:转义无效
答案 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位数字。