首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证未来日期的正则表达式

验证未来日期的正则表达式
EN

Stack Overflow用户
提问于 2013-06-18 09:47:21
回答 1查看 5.3K关注 0票数 0

我正在用asp.net开发mvc 4,我想验证出生日期,这样用户就不能选择未来的日期了,我该怎么做呢?

代码语言:javascript
运行
复制
<script>
    $(document).ready(function () {
        $("#DOB").datepicker({
            dateFormat: "m/d/yy",
        });
    });
</script>
@Html.TextBox("DOB", Model.DOB.ToString("MM/dd/yyyy"), new { @class = "cssClass" })

我不希望服务器端验证,我想在客户端验证。我能用正则表达式验证它吗?

解决方案:

代码语言:javascript
运行
复制
$(document).ready(function () {
        $("#DOB").datepicker({
            dateFormat: "m/d/yy",
        }).change(function () {
            var date = new Date($("#DOB").val());
            var now = new Date();
            if (date > now) {
                alert("Please enter valid date.");
            }
        });
    });
EN

回答 1

Stack Overflow用户

发布于 2013-06-18 10:37:08

为日,月,年制作3个字段,就像几乎所有的在线站点一样。

用值填充字段。

然后,你可以根据你的意愿,把这一年降下来。

您可以简单地使用change事件来验证其他字段。

此外,您可以简单地使用日期+月份+年份,生成日期值,并与your_date <=新日期()进行比较。

否则,您将不得不担心字符串可能具有的所有不同的日期格式,这使得无法对其进行验证。

见这里:

Birthday form using HTML/PHP

就像这样:

代码语言:javascript
运行
复制
<!doctype html>
<html itemscope="itemscope" itemtype="http://schema.org/WebPage">

<head>

    <title>Hello</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script>


    <script type="text/javascript">


        function isLeapYear(iYear)
        {
            return (new Date(iYear, 1, 29).getMonth() == 1);
        }

        function getMonthLength(month, year)
        {
            month = month - 1;

            var monthStart = new Date(year, month, 1);
            var monthEnd = new Date(year, month + 1, 1);
            var monthLength = (monthEnd - monthStart) / (1000 * 60 * 60 * 24);

            return monthLength;
        }


        function PopulateDayDropdown(iMonth, iYear)
        {
            for (i = 1; i < getMonthLength(iMonth, iYear) + 1; i++)
            {
                $('<option/>').val(i).html(i).appendTo('#selDay');
            }


        }

        function PopulateMonthDropdown()
        {

            var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];



            for (i = 0; i < months.length; i++)
            {
                $('<option/>').val(i + 1).html(months[i]).appendTo('#selMonth');
            }

        }


        function PopulateYearDropdown()
        {

            var iCurYear = new Date().getFullYear();

            for (i = iCurYear - 100; i <= iCurYear; i++)
            {
                $('<option/>').val(i).html(i).appendTo('#selYear');
            }

            //$('select option[value="' + iCurYear + '"]').html();
            $('#selYear option[value="' + iCurYear + '"]').attr("selected", "selected")

        }



        $(document).ready(function ()
        {
            // Handler for .ready() called.
            PopulateDayDropdown(1, new Date().getFullYear());
            PopulateMonthDropdown();
            PopulateYearDropdown();



            //$('select[name="month"]').change(function()
            $('select').change(function ()
            {
                //alert("2012 leap year? " + isLeapYear(2012) + "\n" + "2013 leap year? " + );

                var iDay = $("#selDay").val();
                var iMonth = $("#selMonth").val();
                var iYear = $("#selYear").val();

                if (this.id == "selMonth" || this.id == "selYear")
                {
                    $('#selDay').empty();
                    PopulateDayDropdown(iMonth, iYear);
                    $('#selDay option[value="' + iDay + '"]').attr("selected", "selected")
                }


                if (iDay > getMonthLength(iMonth, iYear))
                {
                    var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
                    alert("There is no " + iDay + "th " + months[iMonth - 1] + ".");

                }



                var d = new Date(iYear, iMonth - 1, iDay, 0, 0, 0, 0);


                if (d > new Date())
                {
                    $('#selDay option[value="' + 1 + '"]').attr("selected", "selected")
                    $('#selMonth option[value="' + 1 + '"]').attr("selected", "selected")
                    alert("Future dates are not allowed (values have been reset to January 1st).");
                    return;
                }


                alert("New date of birth: " + d);

            });


        });

    </script>


</head>


<body>


<form action="registration.php" method="post">

    <p>Select date:</p>


    <select id="selDay" name="day">
    </select>



    <select id="selMonth" name="month">
    <!--
    <option value="January">January</option>
    <option value="February">February</option>
    <option value="Mars">Mars</option>
    <option value="April">April</option>
    <option value="May">May</option>
    <option value="June">June</option>
    <option value="July">July</option>
    <option value="September">September</option>
    <option value="October">October</option>
    <option value="November">November</option>
    <option value="December">December</option>
    -->
    </select>

    <select id="selYear" name="year">

    </select>

    <br/><br/>

    <input type="submit" value="Submit" />

</form>

</body>
</html>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17165658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档