我的Datepicker代码
$(function(){
$( "#task_start_date").datepicker({
dateFormat: 'dd-M-yy',
showOn: 'button',
buttonImage :image_us,
buttonImageOnly: true
});
});
HTML输入:
<input type="text" class="form-control validate[required,custom[date]]" name="task_start_date" id="task_start_date" />
正确日期输入验证的JS函数:
"date": {
// Check if date is valid by leap year
"func": function (field) {
var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/);
var match = pattern.exec(field.val());
if (match == null)
return false;
var year = match[1];
var month = match[2]*1;
var day = match[3]*1;
var date = new Date(year, month - 1, day); // because months starts from 0.
return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day);
},
"alertText": "* Invalid date, must be in YYYY-MM-DD format"
},
此处regex
需要YYYY-MM-DD (2014-11-26)
格式,但我们使用dd-M-yy(01-MAR-12)
格式。
正则表达式尝试:
/^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/
上述regex
无效。如何更改regex
以匹配预期的datepicker输出。在DB中插入的值为01-MAR-12
而不是2014-11-26
。
感谢。
答案 0 :(得分:0)
试试这个(未经测试):
(?:0[1-9]|1[0-9]|2[0-9]|3[01])-(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-\d{2}
(?:0[1-9]|1[0-9]|2[0-9]|3[01])
:匹配01到09,10到19,20到29,30到31.但是2月没有超过29,所以你如何处理我们不是正则表达式-
:匹配hypen (?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)
:匹配月份-
:匹配hypen -\d{2}
:按任意顺序匹配任意两位数字你可以缩小正则表达式,但我现在没有时间。
答案 1 :(得分:0)
^(0 [1-9] | [12] [0-9] |?3 [01])[ - ] [A-Z] {3} [ - ] \ d {2} $
这应该可以解决问题。你试过的正则表达式是dd / mm / yyyy或dd-mm-yyyy的格式。
答案 2 :(得分:0)
使用此
"date": {
// Check if date is valid by leap year
"func": function (field) {
var pattern = new RegExp(/^(0?[1-9]|[12][0-9]|3[01])[\/\-\.](0?[1-9]|1[012])[\/\-\.](\d{4})$/);
var match = pattern.exec(field.val());
if (match == null)
return false;
var year = match[3];
var month = match[2]*1;
var day = match[1]*1;
var date = new Date(year, month - 1, day); // because months starts from 0.
return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day);
},
"alertText": "* Invalid date, must be in dd-mm-yyyy format"
},