use*_*752 25 javascript jquery
我试图以这种格式验证日期:(yyyy-mm-dd).我找到了这个解决方案,但它的格式与我需要的格式不同,如:(mm/dd/yyyy).
以下是该解决方案的链接:http://jsfiddle.net/ravi1989/EywSP/848/
我的代码如下:
function isDate(txtDate)
{
var currVal = txtDate;
if(currVal == '')
return false;
var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; //Declare Regex
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;
}
Run Code Online (Sandbox Code Playgroud)
我可以使用什么正则表达式模式来解释无效日期和闰年?
Gob*_*ord 61
我稍微扩展了上面发布的isValidDate函数Thorbin(使用正则表达式).我们使用正则表达式来检查格式(以防止我们获得另一种对Date有效的格式).在这个松散检查之后,我们实际上通过Date构造函数运行它,如果在这种格式下有效,则返回true或false.如果它不是有效日期,我们将从此函数中获取错误.
function isValidDate(dateString) {
var regEx = /^\d{4}-\d{2}-\d{2}$/;
if(!dateString.match(regEx)) return false; // Invalid format
var d = new Date(dateString);
var dNum = d.getTime();
if(!dNum && dNum !== 0) return false; // NaN value, Invalid date
return d.toISOString().slice(0,10) === dateString;
}
/* Example Uses */
console.log(isValidDate("0000-00-00")); // false
console.log(isValidDate("2015-01-40")); // false
console.log(isValidDate("2016-11-25")); // true
console.log(isValidDate("1970-01-01")); // true = epoch
console.log(isValidDate("2016-02-29")); // true = leap day
console.log(isValidDate("2013-02-29")); // false = not leap day
Run Code Online (Sandbox Code Playgroud)
Tho*_*isé 19
如果这对你来说足够了,你也可以使用正则表达式来完成一个稍微简单的工作(例如,如[1]中所示).
它们内置于javascript中,因此您可以在没有任何库的情况下使用它们.
function isValidDate(dateString) {
var regEx = /^\d{4}-\d{2}-\d{2}$/;
return dateString.match(regEx) != null;
}
Run Code Online (Sandbox Code Playgroud)
将是一个功能来检查给定的字符串是否是四个数字 - 两个数字 - 两个数字(几乎是yyyy-mm-dd).但是你可以用更复杂的表达式做更多事情,例如检查[2].
isValidDate("23-03-2012") // false
isValidDate("1987-12-24") // true
isValidDate("22-03-1981") // false
isValidDate("0000-00-00") // true
Run Code Online (Sandbox Code Playgroud)
Fre*_*k.L 10
由于jQuery被标记,这里是一个简单/用户友好的方式来验证必须是日期的字段(您将需要jQuery验证插件):
HTML
<form id="frm">
<input id="date_creation" name="date_creation" type="text" />
</form>
Run Code Online (Sandbox Code Playgroud)
jQuery的
$('#frm').validate({
rules: {
date_creation: {
required: true,
date: true
}
}
});
Run Code Online (Sandbox Code Playgroud)
更新:经过一番挖掘后,我发现没有任何可用于设置特定日期格式的准备参数的证据.
但是,您可以在自定义规则中插入您选择的正则表达式:)
$.validator.addMethod(
"myDateFormat",
function(value, element) {
// yyyy-mm-dd
var re = /^\d{4}-\d{1,2}-\d{1,2}$/;
// valid if optional and empty OR if it passes the regex test
return (this.optional(element) && value=="") || re.test(value);
}
);
$('#frm').validate({
rules: {
date_creation: {
// not optional
required: true,
// valid date
date: true
}
}
});
Run Code Online (Sandbox Code Playgroud)
这个新规则意味着您的标记更新:
<input id="date_creation" name="date_creation" type="text" class="myDateFormat" />
Run Code Online (Sandbox Code Playgroud)
试试这里这是工作演示:
$(function() {
$('#btnSubmit').bind('click', function(){
var txtVal = $('#txtDate').val();
if(isDate(txtVal))
alert('Valid Date');
else
alert('Invalid Date');
});
function isDate(txtDate)
{
var currVal = txtDate;
if(currVal == '')
return false;
var rxDatePattern = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/; //Declare Regex
var dtArray = currVal.match(rxDatePattern); // is format OK?
if (dtArray == null)
return false;
//Checks for mm/dd/yyyy format.
dtMonth = dtArray[3];
dtDay= dtArray[5];
dtYear = dtArray[1];
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;
}
});
Run Code Online (Sandbox Code Playgroud)
改变正则表达式是:
var rxDatePattern = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/; //Declare Regex
Run Code Online (Sandbox Code Playgroud)
moment(dateString, 'YYYY-MM-DD', true).isValid() ||
moment(dateString, 'YYYY-M-DD', true).isValid() ||
moment(dateString, 'YYYY-MM-D', true).isValid();
Run Code Online (Sandbox Code Playgroud)
将正则表达式重新排列为:
/^(\d{4})([\/-])(\d{1,2})\2(\d{1,2})$/
Run Code Online (Sandbox Code Playgroud)
我所做的不仅仅是重新排列条款,我还做了一些工作,以便它不会接受像yyyy-mm/dd
.
之后,您需要调整您的dtMonth
等变量,如下所示:
dtYear = dtArray[1];
dtMonth = dtArray[3];
dtDay = dtArray[4];
Run Code Online (Sandbox Code Playgroud)
之后,代码应该可以正常工作。