Javascript出生日期难题

时间:2012-08-07 23:20:42

标签: javascript html

我需要以以下格式验证出生日期输入的原始日期:

'mmmyyyy'

字符串的前3个字符必须是一年中可接受的3个字母的缩写。 它可以是小写,或大写,或任何混合,只要它拼出jan或feb或mar等等等。 我没有内置的方法,它具有一个月的特定格式的就绪数组,可以与用户输入进行比较。我想我可以在for循环中使用localeCompare()方法来测试输出是否为0然后相应地附加错误消息。

4 个答案:

答案 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);

http://jsfiddle.net/ELMFu/

给出:

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));
}

http://jsfiddle.net/gilly3/NR3aG/