请告诉我如何以这种格式mm / dd / yy验证日期?我实际上找到了一个解决方案,但是当mm-dd-yy时它也会返回true。
我只需要在格式为mm / dd / yy时返回true。
这是我的小提琴 : http://jsfiddle.net/naveennsit/Hk2tc/
alert(isDate("1/12/1234"));
function isDate(txtDate)
{
var currVal = txtDate;
if(currVal == '')
return false;
//Declare Regex
var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var dtArray = currVal.match(rxDatePattern); // is format OK?
if (dtArray == null)
return false;
//Checks for mm/dd/yyyy format.
dtMonth = dtArray[1];
dtDay= dtArray[3];
dtYear = dtArray[5];
if (dtMonth < 1 || dtMonth > 12)
return false;
else if (dtDay < 1 || dtDay> 31)
return false;
else if ((dtMonth==4 || dtMonth==6 || dtMonth==9 || dtMonth==11) && dtDay ==31)
return false;
else if (dtMonth == 2)
{
var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0));
if (dtDay> 29 || (dtDay ==29 && !isleap))
return false;
}
return true;
}
答案 0 :(得分:1)
你的问题是你的正则表达式...它也接受/
字符。
改为
var rxDatePattern = /^(\d{1,2})(-)(\d{1,2})(-)(\d{4})$/;
但是,这个正则表达式也接受40-40-9999这样的日期... 当然,你没有第40个月的第40天;)
答案 1 :(得分:0)
您的问题出在正则表达式中......
(\/|-)
表示“接受/
或-
字符”。
尝试更改此行:
var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
对此:
var rxDatePattern = /^(\d{1,2})(\/)(\d{1,2})(\/)(\d{4})$/;
不同之处在于(\/|-)
的两次出现都被(\/)
取代,/
只与{{1}}匹配。
答案 2 :(得分:0)
您在-
中使用var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
。
您没有过滤-
。
检查此更新fiddle