有没有办法在 JavaScript 中使用正则表达式来验证多种格式的日期,例如:DD-MM-YYYY 或 DD.MM.YYYY 或 DD/MM/YYYY 等?我需要在一个正则表达式中包含所有这些,但我并不擅长它。到目前为止,我已经想出了这个:var dateReg = /^\d{2}-\d{2}-\d{4}$/;
对于 DD-MM-YYYY。我只需要验证日期格式,而不是日期本身。
Javascript - 用于验证日期格式的正则表达式
IT技术
javascript
regex
2021-02-26 00:15:18
6个回答
您可以使用字符类 ( [./-]
) 以便分隔符可以是任何定义的字符
var dateReg = /^\d{2}[./-]\d{2}[./-]\d{4}$/
或者更好的是,匹配第一个分隔符的字符类,然后将其捕获为一个组([./-])
并使用对捕获组的引用\1
来匹配第二个分隔符,这将确保两个分隔符相同:
var dateReg = /^\d{2}([./-])\d{2}\1\d{4}$/
"22-03-1981".match(dateReg) // matches
"22.03-1981".match(dateReg) // does not match
"22.03.1981".match(dateReg) // matches
格式、日、月和年:
var regex = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/;
建议的正则表达式不会验证日期,只会验证模式。
所以 99.99.9999 将通过正则表达式。
您后来指定只需要验证模式,但我仍然认为创建日期对象更有用
function isDate(str) {
var parms = str.split(/[\.\-\/]/);
var yyyy = parseInt(parms[2],10);
var mm = parseInt(parms[1],10);
var dd = parseInt(parms[0],10);
var date = new Date(yyyy,mm-1,dd,0,0,0,0);
return mm === (date.getMonth()+1) && dd === date.getDate() && yyyy === date.getFullYear();
}
var dates = [
"13-09-2011",
"13.09.2011",
"13/09/2011",
"08-08-1991",
"29/02/2011"
]
for (var i=0;i<dates.length;i++) {
console.log(dates[i]+':'+isDate(dates[i]));
}
您可以使用 OR (|) 运算符来使用正则多个表达式。
function validateDate(date){
var regex=new RegExp("([0-9]{4}[-](0[1-9]|1[0-2])[-]([0-2]{1}[0-9]{1}|3[0-1]{1})|([0-2]{1}[0-9]{1}|3[0-1]{1})[-](0[1-9]|1[0-2])[-][0-9]{4})");
var dateOk=regex.test(date);
if(dateOk){
alert("Ok");
}else{
alert("not Ok");
}
}
以上函数可以验证 YYYY-MM-DD、DD-MM-YYYY 日期格式。您可以简单地扩展正则表达式来验证任何日期格式。假设您要验证 YYYY/MM/DD,只需将“[-]”替换为“[-|/]”。此表达式可以验证日期为 31,月份为 12。但闰年和月份以 30 天结束不会验证。
使用括号/^\d{2}[.-/]\d{2}[.-/]\d{4}$/
http://download.oracle.com/javase/tutorial/essential/regex/char_classes.html