MMM dd-yyyy验证正则表达式
MMM dd yyyy validation regular expression?
我需要一个正则表达式来验证MMM-dd-yyyy格式的日期(包括闰年)
我找到了一个正则表达式,但它目前在每年闰年的2月29日出现错误
^(?:(((January|March|May|July|August|October|December) 31)|((January|March|April|May|June|July|August|September|October|November|December) (([0-2]''d)|30))|(February ([01]''d|2[0-8])))|(February 29(?=-((1[6-9]|[2-9]''d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))) ((1[6-9]|[2-9]''d)''d{2})$
请帮我修一下。
提前感谢
这里有一个检查日期字符串有效性的函数,同时考虑格式:
function chkdate(datestr,formatstr){
if (!(datestr && formatstr)) {return false;}
var splitter = formatstr.match(/'-|'/|'s/) || ['-']
,df = formatstr.split(splitter[0])
,ds = datestr.split(splitter[0])
,ymd =[0,0,0]
,dat;
for (var i=0;i<df.length;i++){
if (/yyyy/i.test(df[i])) {ymd[0] = ds[i];}
else if (/mm/i.test(df[i])) {ymd[1] = ds[i];}
else if (/dd/i.test(df[i])) {ymd[2] = ds[i];}
}
dat = new Date(ymd.join('/'));
return !isNaN(dat) && Number(ymd[1])<=12 && dat.getDate()===Number(ymd[2]);
}
//usage (in your case)
var months = {january:1,february:2,march:3,april:4,may:5,
june:6,july:7,august:8,september:9,october:10,
november:11,december:12},
inputdateraw = 'february 29 2011'.split(' '),
inputdate = [months[inputdateraw[0]],
inputdateraw[1],
inputdateraw[2]].join(' ');
console.log(chkdate (inputdate, 'mm dd yyyy')); //=> false
另请参阅此SO问题
你能用这个代码代替吗:
"^(?:(((Jan(uary)?|Ma(r(ch)?|y)|Jul(y)?|Aug(ust)?|Oct(ober)?|Dec(ember)?)'' 31)|((Jan(uary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|Sep(tember)?|(Nov|Dec)(ember)?)'' (0?[1-9]|([12]''d)|30))|(Feb(ruary)?'' (0?[1-9]|1''d|2[0-8]|(29(?=,'' ((1[6-9]|[2-9]''d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))))'','' ((1[6-9]|[2-9]''d)''d{2}))"
如果您使用的是jquery,那么您可以使用它附带的日期选择器。
或者你可以使用验证插件。您可以使用addMethod函数自定义它。
$.validator.addMethod(
"australianDate",
function(value, element) {
// put your own logic here, this is just a (crappy) example
return value.match(/^'d'd?'/'d'd?'/'d'd'd'd$/);
},
"Please enter a date in the format dd/mm/yyyy"
);
然后在你的表格上:
$('#myForm')
.validate({
rules :
myDate : {
australianDate : true
}
});
参见此处
还有一个javascript日期库-Datejs
您可以使用moment js库,它提供了强大的内置函数。参考这个小提琴的工作例子。
var date = "Mar 23 2001";
var indate = "Feb 29 2001";
moment(date,"MMM DD YYYY").isValid(); // true
moment(indate,"MMM DD YYYY").isValid(); // false
相关文章:
- Javascript中的正则表达式验证
- javascript正则表达式验证未按预期工作
- 使用 JavaScript 正则表达式验证每个列表项一个字母的逗号列表
- 在提交时检查正则表达式验证,如果为空,则聚焦所有输入字段
- 如何使用正则表达式验证单字母域名
- Javascript正则表达式验证
- 使用javascript进行正则表达式验证
- 使用正则表达式验证特定范围
- 如何使用正则表达式验证 JavaScript 中的自定义 URL
- 使用正则表达式验证电子邮件地址
- 使用正则表达式验证网址
- 使用正则表达式验证加拿大邮政编码
- javascript 正则表达式验证列表以逗号分隔
- 使用原型进行正则表达式验证
- HTML 正则表达式验证在十进制输入上仅限制一个句点
- 用于 excel 文件上传 jQuery 的正则表达式验证代码
- 两个不同 URL 的正则表达式验证表单
- 正则表达式验证 - 域电子邮件地址
- 正则表达式验证
- 时间格式的 JavaScript 正则表达式验证问题