【问题标题】:Check date with regular expression [duplicate]使用正则表达式检查日期 [重复]
【发布时间】:2018-03-31 11:44:55
【问题描述】:

在这种情况下如何使用这个正则表达式来验证日期?

var regex = new RegExp(/[\d-: ]/, 'g');
console.log(regex.test(updated_post_datetime));

输入将类似于 2011-03-29 12:22somestring 在这种情况下它必须返回 false,但它返回 true。

【问题讨论】:

  • 出于好奇,您希望2011-02-29 25:61:73 会返回什么?
  • false,但是不知道怎么写好

标签: javascript regex


【解决方案1】:

如果你例如添加^+$ 它将起作用,其中

"^"  =  from the beginning of the line
"+"  =  one or more of chosen character
"$"  =  to end of line

var regex = /^[\d-: ]+$/;
console.log(regex.test("2011-03-29 12:22somestring"));
console.log(regex.test("2011-03-29 12:22"));
console.log(regex.test("2011-03-30 12:22"));
console.log(regex.test("2011-04-01 12:22"));
console.log(regex.test("2011-05-19 12:22"));

请注意,这将返回 true,例如123 也是如此,因此,如果您打算验证这确实是一个日期,您需要以下类似的东西:

【讨论】:

  • 谢谢。这就是我要搜索的内容。
  • 非常好的答案!
【解决方案2】:

另一种方法:

console.log(!isNaN(Date.parse(updated_post_datetime)));

【讨论】:

    【解决方案3】:

    你可以试试

    var regex = new RegExp(/^(?:[12]\d{3})-(?:(0[1-9])|(1[0-2]))-(?:([0-2][1-9])|(3[0-1]))\s+(([01][1-9])|(2[0-3])):([0-5][0-9])|(2[0-3])/, 'g');
    console.log(regex.test(updated_post_datetime));
    

    或者最好尝试为它创建一个新日期

    var test1 = '2011-03-29 12:22';
    console.log(test1 + ' test is: ' + isDate(test1));
    
    var test2 = '2011-02-29 25:61:73';
    console.log(test2 + ' test is: ' + isDate(test2));
    
    function isDate(value) {
        if (!value) return false;
    
        try {
            var dt = new Date(value);
            return dt instanceof Date && !isNaN(dt.valueOf())
        }
        catch (e) {
            return false;
        }
    }
    

    因为仅使用正则表达式验证日期是不够的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多