Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 为什么,我得到了:“为什么?”;无效的正则表达式。未捕获的合成错误。无效转义。”;?_Regex_Syntax Error - Fatal编程技术网

Regex 为什么,我得到了:“为什么?”;无效的正则表达式。未捕获的合成错误。无效转义。”;?

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}

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

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

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
模式
属性中的这个正则表达式表示:

  • \d{4}-\d{2}
    -匹配4个数字,
    -
    ,然后从字符串开始匹配2个数字
  • (\d{2})
    -并可选择匹配一个
    -
    ,然后在字符串末尾匹配两位数字

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

此外,模式属性中的正则表达式默认为锚定的,请删除redudant
^
$
并使用可选组缩短模式

pattern="\d{4}-\d{2}(-\d{2})?"
HTML5
模式
属性中的这个正则表达式表示:

  • \d{4}-\d{2}
    -匹配4个数字,
    -
    ,然后从字符串开始匹配2个数字
  • (\d{2})
    -并可选择匹配一个
    -
    ,然后在字符串末尾匹配两位数字

\-
替换为
-
。您将获得“无效转义”,因为您的正则表达式中存在无效转义。在字符类(
[]
)之外,
-
没有特殊意义。所以
\-
是一个无效的转义。@T.J.Crowder:我认为这里令人困惑的部分是
/\-/
在JS中是一个合法的正则表达式,而
/\-/u
不是。通常(即几乎所有地方)标识转义都不是错误,但允许转义,即使严格来说不是必需的。将
\-
替换为
-
。您得到的是“无效转义”,因为您的正则表达式中有无效转义。在字符类(
[]
)之外,
-
没有特殊意义。所以
\-
是一个无效的转义。@T.J.Crowder:我认为这里令人困惑的部分是
/\-/
在JS中是一个合法的正则表达式,而
/\-/u
不是。通常(即几乎所有地方)标识转义都不是错误,但允许转义,尽管严格来说没有必要。我补充了说明:在character类中,连字符甚至可以在ES6正则表达式中使用
u
修饰符进行转义,因为在character类中,
-
可能有特殊含义。哦,是的,绝对可以,我以前没有意识到这一点。再次感谢你!我补充了说明:在character类中,连字符甚至可以在ES6正则表达式中用
u
修饰符转义,因为在character类中,
-
可能有特殊的含义。哦,是的,当然,我以前没有意识到这一点。再次感谢你!