Regex 为什么,我得到了:“为什么?”;无效的正则表达式。未捕获的合成错误。无效转义。”;?
我试图创建一个html输入标记,只接受以2种格式中的1种格式输入的数字,并拒绝所有其他输入 我只接受这些格式的数字,包括需要破折号:Regex 为什么,我得到了:“为什么?”;无效的正则表达式。未捕获的合成错误。无效转义。”;?,regex,syntax-error,Regex,Syntax Error,我试图创建一个html输入标记,只接受以2种格式中的1种格式输入的数字,并拒绝所有其他输入 我只接受这些格式的数字,包括需要破折号: 1234-12 及 注意:这不是日期,而是法律章节号 我读到的关于regex的所有文章都说下面的方法应该有效,但事实并非如此 <input class="form-control" type="text" pattern="^(\d{4}\-\d{2}\-\d{2}
1234-12
及
注意:这不是日期,而是法律章节号
我读到的关于regex的所有文章都说下面的方法应该有效,但事实并非如此
<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}$/:无效的转义
在ES6正则表达式中,不应在字符类之外转义连字符,该字符类与
u
标志一起使用(当前版本的Chrome和FF中默认使用的pattern
regexps)
此外,模式属性中的正则表达式默认为锚定的,请删除redudant^
和$
并使用可选组缩短模式
pattern="\d{4}-\d{2}(-\d{2})?"
HTML5模式
属性中的这个正则表达式表示:
-匹配4个数字,\d{4}-\d{2}
,然后从字符串开始匹配2个数字-
-并可选择匹配一个(\d{2})
,然后在字符串末尾匹配两位数字-
u
标志一起使用的ES6正则表达式(当前版本的Chrome和FF中默认使用的pattern
regexps)中,不应在字符类之外转义连字符
此外,模式属性中的正则表达式默认为锚定的,请删除redudant^
和$
并使用可选组缩短模式
pattern="\d{4}-\d{2}(-\d{2})?"
HTML5模式
属性中的这个正则表达式表示:
-匹配4个数字,\d{4}-\d{2}
,然后从字符串开始匹配2个数字-
-并可选择匹配一个(\d{2})
,然后在字符串末尾匹配两位数字-
\-
替换为-
。您将获得“无效转义”,因为您的正则表达式中存在无效转义。在字符类([]
)之外,-
没有特殊意义。所以\-
是一个无效的转义。@T.J.Crowder:我认为这里令人困惑的部分是/\-/
在JS中是一个合法的正则表达式,而/\-/u
不是。通常(即几乎所有地方)标识转义都不是错误,但允许转义,即使严格来说不是必需的。将\-
替换为-
。您得到的是“无效转义”,因为您的正则表达式中有无效转义。在字符类([]
)之外,-
没有特殊意义。所以\-
是一个无效的转义。@T.J.Crowder:我认为这里令人困惑的部分是/\-/
在JS中是一个合法的正则表达式,而/\-/u
不是。通常(即几乎所有地方)标识转义都不是错误,但允许转义,尽管严格来说没有必要。我补充了说明:在character类中,连字符甚至可以在ES6正则表达式中使用u
修饰符进行转义,因为在character类中,-
可能有特殊含义。哦,是的,绝对可以,我以前没有意识到这一点。再次感谢你!我补充了说明:在character类中,连字符甚至可以在ES6正则表达式中用u
修饰符转义,因为在character类中,-
可能有特殊的含义。哦,是的,当然,我以前没有意识到这一点。再次感谢你!