【问题标题】:Regular expression for date format MM/DD/YYYY returns false results [duplicate]日期格式 MM/DD/YYYY 的正则表达式返回错误结果 [重复]
【发布时间】:2016-08-25 14:17:23
【问题描述】:

我有一个 jquery 日期选择器,每次单击我的文本框 (prfm_dtrequest) 时都会弹出。它返回 mm/dd/yyyy 格式,这是我想要的方式。在单击提交按钮(#submitform)时,我需要验证文本框的内容以确保它的格式正确,然后再将其加载到我的数据库中。我下面的代码只返回“不是有效日期”,即使我

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title>testing</title>
              <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
              <script src="//code.jquery.com/jquery-1.10.2.js"></script>
              <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
              <link rel="stylesheet" href="/resources/demos/style.css">
             <script>
              $(function() {
                $( "#prfm_dtrequest" ).datepicker();
              });
            </script>
            <script>
                $(document).ready(function(){
                $("#submitform").click(function(){
                    var daterequested = $("#prfm_dtrequest").val();
                      var dateMMDDYYYRegex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/ ;
                        if(dateMMDDYYYRegex.test(dateMMDDYYYRegex)){
                           alert('is a valid date: '+daterequested);
                        }else{
                           alert('is not a valid date: '+daterequested);
                        }
                });
            });
            </script>
        </head>
        <meta charset="utf-8">
        <body>
            <form method='post' action=''>
                <input type="date" id="prfm_dtrequest" class='txtfld01' name=''><input type="submit" id="submitform" value="submit">
            </form>
        </body>
    </html>

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    请更正您的正则表达式(有效日期示例:03/31/1988):

    $(document).ready(function(){
        $("#submitform").click(function(){
    
        /* isValidData source: http://stackoverflow.com/questions/5812220/how-to-validate-a-date */
    
        function isValidDate(s) {
           var bits = s.split('/');
           var d = new Date(bits[2], bits[0] - 1, bits[1]);
           return d && (d.getMonth() + 1) == bits[0] && d.getDate() == Number(bits[1]);
        }
    
        var daterequested = $("#prfm_dtrequest").val();
            var dateMMDDYYYRegex = "^[0-9]{2}/[0-9]{2}/[0-9]{4}$";
            if(daterequested.match(dateMMDDYYYRegex) && isValidDate(daterequested)){
                alert('is a valid date: '+daterequested);
            }else{
                alert('is not a valid date: '+daterequested);
            }
        });
    });
    

    Demo

    结果:

    【讨论】:

    • 但它会在任何日期返回有效日期!例如:50/50/0000 是有效日期?!
    • 返回 23/05/2016 作为有效日期。它必须是 mm/dd/yyyy。谢谢
    • 我需要它接受 mm/dd/yyyy 格式而不是 dd/mm/yyyy。您的更新代码适用于 dd/mm/yyyy。
    • 你现在可以了吗?只允许 mm/dd/yyyy
    【解决方案2】:

    对 mm/dd/yyyy 格式使用下面的正则表达式:

        var dateMMDDYYYRegex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/ ;
        if(dateMMDDYYYRegex.test(dateMMDDYYYRegex)){
           alert('is a valid date: '+daterequested);
        }else{
           alert('is not a valid date: '+daterequested);
        }
    

    【讨论】:

    • 返回无效格式
    猜你喜欢
    • 2023-04-07
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2022-01-04
    • 2013-07-04
    相关资源
    最近更新 更多