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

时间:2011-06-19 13:51:54

标签: 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(userInput[1].value)){
           alert("date not in correct format of MM/dd/YYYY");
           return false;  
        }

现在我希望它返回MM / DD / YYYY但是如果我在其中放入有效日期会引发警报?任何人的想法?

8 个答案:

答案 0 :(得分:12)

试试这个:

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);
}

您可以使用以下命令声明正则表达式:

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

或者:

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

注意/

答案 1 :(得分:3)

也许是因为你宣布isGoodDate()函数,然后你正在调用isCorrectDate()函数?

尝试:

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);
}

像魅力一样工作,test it here

请注意,此正则表达式将验证从01/01/190031/12/2099的日期。如果要更改年份边界,请在最后一个正则表达式块上更改这些数字(19|20)。例如。如果您希望年度范围从01/01/180031/12/2099,只需将其更改为(18|20)

答案 2 :(得分: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

答案 3 :(得分:2)

我同意@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) 
}

将处理29/2/2001和31/4/2011


这个脚本要处理美国日期吗

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) 
}

答案 4 :(得分:1)

在你的代码中添加它,它在这里工作得很好。 点击此处http://jsfiddle.net/Shef/5Sfq6/

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);

}

答案 5 :(得分:0)

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

nano .bashrc
export PATH=/home/biraj/kafka_2.12-2.2.1/bin:$PATH

答案 6 :(得分:0)

尝试下面的代码,该代码接受以下日期格式:

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 \ YY,DD \ MM \ YYYY,DD \ MM \ YY

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);
}

答案 7 :(得分:-1)

(/^(0[1-9]|1[012])- /.- /.\d\d$/) 您可以使用它肯定会起作用,这是用于 MM/DD/YYYY