javascript - 在 JavaScript 中验证日期为 mm/dd/yyyy 格式

标签 javascript validation date datepicker

我有一个 MVC 日期字段,我正在尝试将其验证为 mm/dd/yyyy 格式。我不希望用户输入 1,2 或 3 位数的年份。而且,我想确保输入了有效的日期。这是我正在使用的代码:

 <script type="text/javascript">
        $(function () {
            $('.datepicker').datepicker();
            ForceDatePickerFormat();
        });

        function ForceDatePickerFormat() {
            $(".datepicker").on("blur", function (e) {

                var date, day, month, newYear, value, year;
                value = e.target.value;
                if (value.search(/(.*)\/(.*)\/(.*)/) !== -1) {
                    date = e.target.value.split("/");
                    month = date[0];
                    day = date[1];
                    year = date[2];
                    if (year === "") {
                        year = "0";
                    }
                    if (year.length < 4) {
                        alert ("Date year must by 4 digits");
                     }
              }
            });
        }

     </script>

我使用了“blur”,因为当用户尝试更改它时,“keyup”在年份中引起了一个奇怪的问题。 “模糊”很好,只是用户必须单击才能使日历消失,选项卡不起作用,并且单击日期不起作用。如果用户按回车键,则它会接受该日期而不进行验证。我需要允许用户手动输入日期,因为他们经常输入 future 的日期。有没有人对如何调整此设置有任何建议,以便单击日期关闭日历,选项卡关闭日历,并且日期仍然有效?

最佳答案

这是您需要的代码片段。您只需将日期传递给下面的函数,如果给定日期有效/无效,该函数将返回 true/false

function validateDate(dateValue)
{
    var selectedDate = dateValue;
    if(selectedDate == '')
        return false;

    var regExp = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; //Declare Regex
    var dateArray = selectedDate.match(regExp); // is format OK?

    if (dateArray == null){
        return false;
    }

    month = dateArray[1];
    day= dateArray[3];
    year = dateArray[5];        

    if (month < 1 || month > 12){
        return false;
    }else if (day < 1 || day> 31){ 
        return false;
    }else if ((month==4 || month==6 || month==9 || month==11) && day ==31){
        return false;
    }else if (month == 2){
        var isLeapYear = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day> 29 || (day ==29 && !isLeapYear)){
            return false
        }
    }
    return true;
}

上述函数将:

  • 检查日期格式是否正确(MM/DD/YYYY)。
  • 检查给定日期是否有效。例如:四月只有 30 天。如果我们将 4 月的日期指定为 31,则此函数会将其验证为无效日期。
  • 检查 2 月 29 日。仅当指定年份是闰年时,它才会被验证为有效日期。

欲了解更多信息,请访问链接:http://www.j2eekart.com/2015/01/date-validation-in-javascript.html

将代码更改为:

<script type="text/javascript">
    $(document).ready(function(){
        $('.datepicker').datepicker();

        $(".datepicker").on("blur", function (e){
            var isValidDate = validateDate(e.target.value);
            if(!isValidDate){
                 alert("Please enter a valid date in MM/DD/YYYY format");
            }
        });
    });

    function validateDate(dateValue)
    {
        var selectedDate = dateValue;
        if(selectedDate == '')
           return false;

        var regExp = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; //Declare Regex
        var dateArray = selectedDate.match(regExp); // is format OK?

        if (dateArray == null){
            return false;
        }

        month = dateArray[1];
        day= dateArray[3];
        year = dateArray[5];        

        if (month < 1 || month > 12){
            return false;
        }else if (day < 1 || day> 31){ 
            return false;
        }else if ((month==4 || month==6 || month==9 || month==11) && day ==31){
            return false;
        }else if (month == 2){
            var isLeapYear = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
            if (day> 29 || (day ==29 && !isLeapYear)){
                return false
            }
        }
        return true;
    }
</script>

关于javascript - 在 JavaScript 中验证日期为 mm/dd/yyyy 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33360233/

相关文章:

javascript - 查看文本何时更改 Div 大小

javascript - 如何使用:contains(text) with any text with jQuery

laravel - "except"和 "idColumn"在 "unique:table,column,except,idColumn"中指的是什么?来自 Laravel 文档

具有特殊字符和空格的 Javascript 正则表达式

javascript - Karma/Mocha 测试间歇性地导致 Chrome 中的整个页面重新加载

validation - 使用队列时何时验证 paypal IPN?

ruby-on-rails - 如何验证 Rails 中的日期?

javascript - 以秒为单位获取两个日期之间的时差

java - 计算 Java 中两个日期或日历对象之间的天数

javascript - 使用 Moment.js 格式化后收到非预期日期