Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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,我需要一个javascript正则表达式,可以测试以下格式的日期: yyyy-MM-dd(示例:2014-12-31) 年月日(示例:2014年12月31日) 年月日(示例:31.12.14) ddMMyyyy(示例:12312014) ddMMyy(示例:123114) 年月日(示例:12.6.14) 年月日(示例:2014年6月12日) 对不起,我对正则表达式真的很在行。对于职业选手来说,这可能是轻而易举的事。非常感谢。您的第一个模式与其他模式太不相同,无法进行有意义的合并。所以:\d{

我需要一个javascript正则表达式,可以测试以下格式的日期:

  • yyyy-MM-dd(示例:2014-12-31)
  • 年月日(示例:2014年12月31日)
  • 年月日(示例:31.12.14)
  • ddMMyyyy(示例:12312014)
  • ddMMyy(示例:123114)
  • 年月日(示例:12.6.14)
  • 年月日(示例:2014年6月12日)

对不起,我对正则表达式真的很在行。对于职业选手来说,这可能是轻而易举的事。非常感谢。

您的第一个模式与其他模式太不相同,无法进行有意义的合并。所以:
\d{4}-\d\d-\d\d

对于其他的,您允许使用可选的
作为分隔符,以及两位数或四位数的年份。所以您有:
\d\d(\.?)\d\d?\1\d\d(?:\d\d)?

上面的
\1
基本上是重复
(\.?)
的结果-即,如果之前有点,则重复一个点;如果之前没有点,则重复一个点

结果:

/^(?:\d{4}-\d\d-\d\d|\d\d(\.?)\d\d?\1\d\d(?:\d\d)?)$/
你看过了吗?你不想用正则表达式来处理这样的事情,因为上面提到的99.33.8888不是日期

这个聪明的功能可以解决您的问题:

var isDate_ = function(input) {
    var status = false;
    if (!input || input.length <= 0) {
      status = false;
    } else {
      var result = new Date(input);
      if (result == 'Invalid Date') {
        status = false;
      } else {
        status = true;
      }
    }
    return status;
  }
var isDate=函数(输入){
var状态=假;

如果(!input | | input.length其中一个与其他的不一样…即,第一个与其他的格式完全不同,使得单个正则表达式难以使用。您不能(也不应该)使用正则表达式来验证日期。
99.33.8888
是有效日期吗?最后两个示例与其签名不匹配。(它们是MMddyyyy)
ddMMyyyy(示例:12312014)
不正确:“31”是天,“12”是月,所以应该是
MMddyyyy
或者应该重写示例。
ddMMyy(示例:123114)
不正确:原因相同。如果您与“示例”一致格式设置,“12”始终表示月份,而不是日期,
31
6
应为日期。能否修改帖子以反映正确的格式(或正确的示例)?那么,你是说你的结果只能用于最后4个示例,而不能用于第一个示例?我认为正则表达式允许某种类型的ORing。@AndroidDev我将问题分成两个问题,然后将它们与
-它就在那里;)@AndroidDev忘记将最后两位数设为可选,因此它不接受两位数的年份。请立即尝试。我在末尾又添加了两个示例。请您也包括这些示例:-)现在支持一位数的月份。解决方案必须允许我指定的格式。请记住以某种方式验证正则表达式。