Javascript中MM/DD/YYYY的正则表达式

Javascript中MM/DD/YYYY的正则表达式,javascript,regex,Javascript,Regex,我刚刚用javaScript编写了这个正则表达式,但它似乎不起作用,下面是我的函数: function isGoodDate(dt){ var reGoodDate = new RegExp("/^((0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2})*$/"); return reGoodDate.test(dt); } 这就是我在表单验证中所说的 if(!isGoodDate(userI

我刚刚用javaScript编写了这个正则表达式,但它似乎不起作用,下面是我的函数:

function isGoodDate(dt){
    var reGoodDate = new RegExp("/^((0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2})*$/");
    return reGoodDate.test(dt);
}
这就是我在表单验证中所说的

if(!isGoodDate(userInput[1].value)){
           alert("date not in correct format of MM/dd/YYYY");
           return false;  
        }
现在我希望它返回MM/DD/YYYY,但是如果我在其中输入有效日期,会引发警报吗?有什么想法吗?

可能是因为您正在声明
isGoodDate()
函数,然后调用
isCorrectDate()
函数

尝试:

就像一个魔咒


注意,此正则表达式将验证从
01/01/1900
31/12/2099
的日期。如果要更改年份边界,请更改最后一个regex块上的数字
(19 | 20)
。例如,如果您希望年份范围从
01/01/1800
31/12/2099
,只需将其更改为
(18 | 20)
注意,在复制+粘贴之前:问题的正则表达式中包含一些语法错误。这个答案是修正语法。它并不是日期/时间解析的最佳正则表达式。

试试这个:

function isGoodDate(dt){
    var reGoodDate = /^((0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2})*$/;
    return reGoodDate.test(dt);
}
function isGoodDate(dt){
    var dts  = dt.split('/').reverse()
       ,dateTest = new Date(dts.join('/'));
    return isNaN(dateTest) ? false : true;
}

//explained
    var dts  = dt.split('/').reverse()
//      ^ split input and reverse the result
//        ('01/11/2010' becomes [2010,11,01]
//        this way you can make a 'universal' 
//        datestring out of it
       ,dateTest = new Date(dts.join('/'));
//     ^ try converting to a date from the 
//       array just produced, joined by '/'
    return isNaN(dateTest) ? false : true;
//         ^ if the date is invalid, it returns NaN
//           so, if that's the case, return false
您可以使用以下命令声明正则表达式:

new RegExp("^((0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2})*$")
或:


请注意
/

我认为这不需要正则表达式。试试这个:

function isGoodDate(dt){
    var dts  = dt.split('/').reverse()
       ,dateTest = new Date(dts.join('/'));
    return isNaN(dateTest) ? false : true;
}

//explained
    var dts  = dt.split('/').reverse()
//      ^ split input and reverse the result
//        ('01/11/2010' becomes [2010,11,01]
//        this way you can make a 'universal' 
//        datestring out of it
       ,dateTest = new Date(dts.join('/'));
//     ^ try converting to a date from the 
//       array just produced, joined by '/'
    return isNaN(dateTest) ? false : true;
//         ^ if the date is invalid, it returns NaN
//           so, if that's the case, return false

我同意@KooiInc,但这还不足以测试NaN

function isGoodDate(dt){
    var dts  = dt.split('/').reverse()
       ,dateTest = new Date(dts.join('/'));
    return !isNaN(dateTest) && 
       dateTest.getFullYear()===parseInt(dts[0],10) &&
       dateTest.getMonth()===(parseInt(dts[1],10)-1) &&
       dateTest.getDate()===parseInt(dts[2],10) 
}
将处理2001年2月29日和2011年4月31日


这个脚本要处理我们的日期吗

function isGoodDate(dt){
    var dts  = dt.split('/')
       ,dateTest = new Date(dt);
    return !isNaN(dateTest) && 
       dateTest.getFullYear()===parseInt(dts[2],10) &&
       dateTest.getMonth()===(parseInt(dts[0],10)-1) &&
       dateTest.getDate()===parseInt(dts[1],10) 
}

在你的代码中添加这个,它在这里工作得非常好。 点击这里

}验证(DD-MM-YYYY)格式:)


请尝试以下接受以下日期格式的代码:

MM-DD-YYYY,MM-DD-YY,DD-MM-YYYY,DD-MM-YY,MM/DD/YYYY,MM/DD/YY, DD/MM/YYYY,DD/MM/YY,MM\DD\YYYY,MM\DD\yyy,DD\MM\YYYY,DD\MM\YY

(/^(0[1-9]| 1[012])-/.-/.-/.\d$/)
你可以使用它,它肯定会工作,这是针对MM/DD/YYYY的

是的,我没有提到,在我一生中试图减少代码时,修改了一个拼写错误的问题,我无法让它适用于MM/DD/YYYY格式。你将如何修改它以使其如此工作?完全不适合美国约会。只需拆分而不使用反转,并使用字符串按原样创建日期
newdate(dt)
,然后yyyy是
parseInt(dts[2],10)
,月是[0],日是[1],此处的某些内容为off-如果我的年份是2050或更大,则返回false!这个答案是关于声明regexp的正确方法。不管里面的内容是正确的还是不正确的都取决于医生谢谢你分享你的知识这对约会比赛很有帮助这当然是最简单的方法,所有人都可以适应他的目的。然而,我想知道它是否能提供最好的性能。我猜Date也使用了某种正则表达式。。。对这两个方面进行测试将会很有趣
function isGoodDate(dt){
    var dts  = dt.split('/')
       ,dateTest = new Date(dt);
    return !isNaN(dateTest) && 
       dateTest.getFullYear()===parseInt(dts[2],10) &&
       dateTest.getMonth()===(parseInt(dts[0],10)-1) &&
       dateTest.getDate()===parseInt(dts[1],10) 
}
function isGoodDate(dt){
var reGoodDate = /^(?:(0[1-9]|1[012])[\/.](0[1-9]|[12][0-9]|3[01])[\/.](19|20)[0-9]{2})$/;
return reGoodDate.test(dt);
function isGoodDate(dt) {
    var reGoodDate = /^(?:(0[1-9]|[12][0-9]|3[01])[\-.](0[1-9]|1[012])[\-.](19|20)[0-9]{2})$/;
    return reGoodDate.test(dt);
}
function isGoodDate(dt) {
    var reGoodDate = /(?:((0\d|[12]\d|3[01])|(0\d|1[012]))[\-|\\|\/]((0\d|1[012])|(0\d|[12]\d|3[01]))[\-|\\|\/](((19|20)\d{2})|\d\d))/;
    return reGoodDate.test(dt);
}