Javascript - 正则表达式验证日期格式

Edu*_*uca 25 javascript regex

有没有办法在JavaScript中使用regex来验证多种格式的日期,例如:DD-MM-YYYY或DD.MM.YYYY或DD/MM/YYYY等?我需要所有这些在一个正则表达式,我不是很好用它.到目前为止,我已经想出了这个:var dateReg = /^\d{2}-\d{2}-\d{4}$/;DD-MM-YYYY.我只需要验证日期格式,而不是日期本身.

Bil*_*oon 33

您可以使用字符类([./-]),以便分隔符可以是任何已定义的字符

var dateReg = /^\d{2}[./-]\d{2}[./-]\d{4}$/
Run Code Online (Sandbox Code Playgroud)

或者更好的是,匹配第一个分隔符的字符类,然后将其捕获为一个组,([./-])并使用对捕获的组的引用\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
Run Code Online (Sandbox Code Playgroud)

  • 99-99-9999比赛 (5认同)

nic*_*bie 16

格式,天,月和年:

var regex = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/;

  • 从技术上讲,@ BillyMoon,我们实际上是在验证它的格式,而不是日期本身.你的朋友也允许30-02-2013这样的日期. (3认同)

mpl*_*jan 9

建议的正则表达式不会验证日期,只验证模式.

所以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]));
}    
Run Code Online (Sandbox Code Playgroud)


小智 8

您可以使用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");
    }
}
Run Code Online (Sandbox Code Playgroud)

以上功能可以验证YYYY-MM-DD,DD-MM-YYYY日期格式.您可以简单地扩展正则表达式以验证任何日期格式.假设您要验证YYYY/MM/DD,只需将"[ - ]"替换为"[ - | /]".此表达式可以将日期验证为31个月到12个月.但是30天的闰年和月份未经验证.