我遇到了日期验证问题。我使用以下reg表达式仅以dd-mmm-yyyy
格式输入日期
dateValidatorRegex = /^(\d{1,2})(-)(?:(\(jan)|(feb)|(mar)|(apr)|(may)|(jun)|(jul)|(aug)|(sep)|(oct)|(nov)|(dec))(-)(\d{4})$/i;
但在这种情况下,当我在jan
月份输入日期时,它没有通过验证。请提出建议。
答案 0 :(得分:2)
这是一个长期正则表达式的替代方法,它不处理闰年
function isValidDate(str) {
var d = new Date(Date.parse(str.replace(/-/g," "))), parts = str.split("-");
var monthNum = ["jan","feb","mar","apr","may","jun","jul",
"aug","sep","oct","nov","dec"].indexOf(parts[1].toLowerCase());
return parts[0]==d.getDate() &&
monthNum == d.getMonth() &&
parts[2]==d.getFullYear();
}
请注意,数组的.indexOf与旧的IE不兼容,因此您可以
var monthNum = {"jan":0,"feb":1,"mar":2,"apr":3,"may":4,
"jun":5,"jul":6,"aug":7,"sep":8,"oct":9,
"nov":10,"dec":11].[parts[1].toLowerCase()];
代替
答案 1 :(得分:1)
反斜杠的正则表达式错误。它将是,
var dateValidatorRegex = /^(\d{1,2})(-)(?:((jan)|(feb)|(mar)|(apr)|(may)|(jun)|(jul)|(aug)|(sep)|(oct)|(nov)|(dec)))(-)(\d{4})$/i;
通过反斜杠jan月没有验证。