检查任何给定的字符串是否为有效日期

时间:2015-02-18 21:39:28

标签: javascript

有谁知道检查字符串是否为有效日期的任何方法?我试图阻止无效日期,而不是强制任何类型的日期格式。基本上就是问题所在:

!!Date.parse('hello 1') === true

Javascript可以从该字符串中找出日期,因此,它是一个日期。我宁愿不是。任何人吗?

4 个答案:

答案 0 :(得分:2)

由于您使用的是moment.js,请尝试使用parsingFlags()

var m = moment("hello 1", ["YYYY/MM/DD"]).parsingFlags();
if (!m.score && !m.empty) {
    // valid
}

这是用于isValid()的指标,您可以使用它们来制定更严格的验证功能。

注意:您可以在第二个参数的数组中指定其他格式。

可能感兴趣的parsingFlags()返回的其他一些属性如下:

  • m.unusedInput - 例如["hello "]
  • m.unusedTokens - 例如["MM", "DD"]

答案 1 :(得分:2)

离开单词周围的空间有多接近你?它至少可以淘汰"你好1"等等。

Date.parse('hello 1'.replace(/\s*([a-z]+)\s*/i, "$1")); // NaN
Date.parse('jan 1'.replace(/\s*([a-z]+)\s*/i, "$1")); // Valid

[更新] 好的,所以我们只需更换字母和数字之间的任何非字母数字:

replace(/([a-z])\W+(\d)/ig, "$1$2")

答案 2 :(得分:0)

使用此功能检查date

  function isDate(s)
{   
  if (s.search(/^\d{1,2}[\/|\-|\.|_]\d{1,2}[\/|\-|\.|_]\d{4}/g) != 0)
     return false;
  s = s.replace(/[\-|\.|_]/g, "/"); 
  var dt = new Date(Date.parse(s)); 
  var arrDateParts = s.split("/");
     return (
         dt.getMonth() == arrDateParts[0]-1 &&
         dt.getDate() == arrDateParts[1] &&
         dt.getFullYear() == arrDateParts[2]
     );   
}

console.log(isDate("abc 1")); // Will give false

工作Fiddle

答案 3 :(得分:0)

如果你检查几种类型的日期会没问题吗?

类似于缩小授权日期:

if( givenDate.match(/\d\d\/\d\d\/\d\d\d\d/)
|| givenDate.match(/\w*? \d{1,2} \d{4}/)
|| givenDate.match(anotherFormatToMatch) )

<强>已更新

或者,尽管它限制了角色,你可以使用这样的东西:

function myFunction() {
    var str = "The rain in SPAIN stays mainly in the plain"; 
    var date = new Date(str);
    if (date != "Invalid Date" && !isNaN(new Date(date) && !str.match(/a-z/g) )
        alert(date);
}