我需要以以下格式验证出生日期输入的原始日期:
'mmmyyyy'
字符串的前3个字符必须是一年中可接受的3个字母的缩写。
它可以是小写,或大写,或任何混合,只要它拼出jan或feb或mar等等等。
我没有内置的方法,它具有一个月的特定格式的就绪数组,可以与用户输入进行比较。我想我可以在for循环中使用localeCompare()
方法来测试输出是否为0然后相应地附加错误消息。
答案 0 :(得分:1)
function dateTester() {
var d = new Date(),
i,
mo = [],
moIsValid;
for (i = 0; i < 12; i += 1) {
d.setMonth(i);
mo.push(d.toLocaleString().split(' ')[1].substr(0, 3));
}
return new RegExp('^(' + mo.join('|') + ')', 'i');
}
var moIsValid = dateTester();
alert(moIsValid.test('fEb1992'));
如果您不希望用户当前的区域设置名称有效,那么只需将toLocaleString()
切换为toString()
即可。但是,你为什么不这样做呢:
var moIsValid = /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i;
alert(moIsValid.test('fEb1992'));
答案 1 :(得分:0)
除非您真的,真的想要通过“动态”测试检查一个月,您可以这样做:
var months = 'jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec';
months.indexOf('JaN1975'.toLowerCase().substring(0,3)
检查:
console.log(months.indexOf('JaN1975'.toLowerCase().substring(0,3)) != -1);
console.log(months.indexOf('oct1975'.toLowerCase().substring(0,3)) != -1);
console.log(months.indexOf('FEB1975'.toLowerCase().substring(0,3)) != -1);
console.log(months.indexOf('Ja1975'.toLowerCase().substring(0,3)) != -1);
console.log(months.indexOf('091975'.toLowerCase().substring(0,3)) != -1);
给出:
true
true
true
false
false
答案 2 :(得分:0)
new Date(str.replace(/(\D+)(\d+)/, "1 $1 $2"))
编辑:使用isNaN
来测试日期是否无法解析。
答案 3 :(得分:0)
我喜欢这个用于验证输入的简洁功能:
var months = "janfebmaraprmayjunjulaugsepoctnovdec";
function validate(dateString) {
return dateString.length == 7 &&
!(months.indexOf(dateString.substr(0,3).toLowerCase()) % 3) &&
isFinite(dateString.substr(3));
}