有谁知道检查字符串是否为有效日期的任何方法?我试图阻止无效日期,而不是强制任何类型的日期格式。基本上就是问题所在:
!!Date.parse('hello 1') === true
Javascript可以从该字符串中找出日期,因此,它是一个日期。我宁愿不是。任何人吗?
答案 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);
}