我需要以以下格式验证原始出生日期字段输入:
'mmyyy'
其中字符串的前 3 个字符必须是可接受的 3 个字母的年份月份缩写。
它可以是小写字母,也可以是大写字母,或者任意混合,只要它拼出 jan 或 feb 或 mar 等等等。
我知道没有内置方法具有这种特定格式的现成数组一个月才能与用户输入进行比较。我在想我可以localeCompare()
在 for 循环中使用该方法来测试输出是否不是 0,然后相应地附加一条错误消息。
我需要以以下格式验证原始出生日期字段输入:
'mmyyy'
其中字符串的前 3 个字符必须是可接受的 3 个字母的年份月份缩写。
它可以是小写字母,也可以是大写字母,或者任意混合,只要它拼出 jan 或 feb 或 mar 等等等。
我知道没有内置方法具有这种特定格式的现成数组一个月才能与用户输入进行比较。我在想我可以localeCompare()
在 for 循环中使用该方法来测试输出是否不是 0,然后相应地附加一条错误消息。
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'));
除非你真的,真的想用“动态”测试检查一个月,你可以这样做:
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
new Date(str.replace(/(\D+)(\d+)/, "1 $1 $2"))
编辑:用于isNaN
测试日期是否解析失败。
我喜欢这个简洁的函数来验证你的输入:
var months = "janfebmaraprmayjunjulaugsepoctnovdec";
function validate(dateString) {
return dateString.length == 7 &&
!(months.indexOf(dateString.substr(0,3).toLowerCase()) % 3) &&
isFinite(dateString.substr(3));
}