Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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
为什么这个正则表达式不会在Javascript中导致错误?_Javascript_Regex - Fatal编程技术网

为什么这个正则表达式不会在Javascript中导致错误?

为什么这个正则表达式不会在Javascript中导致错误?,javascript,regex,Javascript,Regex,我对不同的正则表达式格式有点困惑 以下方法导致错误 function validateDate(str) { var expr = /^((((0?[1-9]|[12]\d|3[01])[\/](0?[13578]|1[02])[\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\/](0?[13456789]|1[012])[\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\/]0

我对不同的正则表达式格式有点困惑

以下方法导致错误

function validateDate(str)  {
    var expr = /^((((0?[1-9]|[12]\d|3[01])[\/](0?[13578]|1[02])[\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\/](0?[13456789]|1[012])[\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\/]0?2[\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\/]0?2[\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
    return validate(expr, str);
}

function validateTime(str)  {
    var expr = /^([0-1]?[0-9]|[2]?[0-3])\:([0-5][0-9])$/;
    return validate(expr, str);
}

function validate(pattern, str) {
    return str.match(pattern);
}
我从网络上获取了以下正则表达式。我认为问题在于某些转义字符

这里怎么了


谢谢:)

validateDate
函数中,您将正则表达式对象分配给
exp
变量,但在下一行中,您将使用未定义的
expr
变量

编辑: 您希望函数返回什么?现在他们正在返回一组匹配项。如果希望它们只返回true或false,则可能需要使用
test
方法:

function validate(pattern, str) {
  return pattern.test(str);
}

validateDate
函数中,您将正则表达式对象分配给
exp
变量,但在下一行中,您将使用未定义的
expr
变量

编辑: 您希望函数返回什么?现在他们正在返回一组匹配项。如果希望它们只返回true或false,则可能需要使用
test
方法:

function validate(pattern, str) {
  return pattern.test(str);
}

完成。但这还不是全部。还是有点不对劲。我已将
\d
替换为
\\d
。。仍然不走运。不要将
\d
替换为
\\d
,那么您将匹配两个字符反斜杠和“d”,而不是数字。如果在字符串中有模式,则要转义反斜杠。你在说什么样的错误?会发生什么?您是否收到任何错误消息?完成。但这还不是全部。还是有点不对劲。我已将
\d
替换为
\\d
。。仍然不走运。不要将
\d
替换为
\\d
,那么您将匹配两个字符反斜杠和“d”,而不是数字。如果在字符串中有模式,则要转义反斜杠。你在说什么样的错误?会发生什么?您是否收到任何错误消息?使用诸如日期验证之类的正则表达式只是自找麻烦。我确信有一些更短更简单的变体做得足够好(js验证无论如何都不可信)。@serg555:你需要这样的东西来处理闰年。如果你只想验证格式而不是测试,如果它是一个有效的日期,你可以只使用<代码> ^ \d\\d\\d\d\d\dB\<代码>,但是将54/76/0000视为有效日期…@ Guffa:我认为使用简单的ReXEP将日期分割成组件将更容易,如<代码> ^(\d { 2 })/(\d { 2 })/(\d { 4 })。$然后在js中执行所需的检查。这就是我要做的:)我和@serg555在一起:那不是一个正则表达式,这是一个客厅的把戏。使用日期验证这样的纳粹正则表达式只是自找麻烦。我确信有一些更短更简单的变体做得足够好(js验证无论如何都不可信)。@serg555:你需要这样的东西来处理闰年。如果你只想验证格式而不是测试,如果它是一个有效的日期,你可以只使用<代码> ^ \d\\d\\d\d\d\dB\<代码>,但是将54/76/0000视为有效日期…@ Guffa:我认为使用简单的ReXEP将日期分割成组件将更容易,如<代码> ^(\d { 2 })/(\d { 2 })/(\d { 4 })。$然后在js中执行所需的检查。这就是我要做的:)我和@serg555在一起:那不是正则表达式,这是客厅里的把戏。