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

时间:2015-10-27 04:59:05

标签: 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>

我使用&#34;模糊&#34;因为&#34; keyup&#34;当用户试图改变它时,引起了一个奇怪的问题。 &#34;模糊&#34;是好的,除非用户必须点击让日历消失,标签不起作用,点击日期不起作用。如果用户点击返回,则接受日期而不进行验证。我需要允许用户手动输入日期,因为他们经常在将来输入日期。有没有人有任何关于如何调整这个的建议,以便点击日期关闭日历,选项卡关闭日历,日期仍然有效?

1 个答案:

答案 0 :(得分:1)

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

,则返回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。
  • 检查给定日期是否有效。例如:4月只有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>