You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC中基于jQuery实现DD-MM-YYYY日期格式验证方案

DD-MM-YYYY格式日期输入验证实现方案

需求要求

  • 仅允许短横线“-”作为分隔符,禁止输入点号“.”、斜杠“/”等其他特殊字符及字母;
  • 日期有效性校验:日不超过31,月不超过12;日和月必须为两位数字(例如需输入09而非9),禁止输入三位数字;
  • 无效日期(如32-09-2022)需触发错误提示;31-06-2022这类超出当月天数的日期需自动转换为01-07-2022;
  • 验证错误提示信息为“日期格式应为DD-MM-YYYY”。

实现代码

HTML部分

<input type="text" class="form-control calendar datepicker" 
    style="width: 100% !important;" placeholder="选择日期" name="fixdate" id="fixdate" 
    onblur="GetContName('fixdate')" maxlength="10" 
    onkeyup="DateContValidateSetLoSto('fixdate')" 
    autocomplete="off" data-date-format="dd-mm-yyyy">

<span id="msgfixdate" style="display:none; color:red"></span>

JavaScript部分

// 输入框失焦时触发验证
function GetContName(controlName) {    
    DateContVali(controlName)
}

// 重置日期选择器
function ResetDatePicker(controllName) {
    $("#" + controllName).datepicker('setDate', null)
}

// 记录输入框内容到本地存储
function DateContValidateSetLoSto(controllName) {
    localStorage.setItem("Val", $("#" + controllName).val());
}

// 重置提示文本
function ResetSpanText(controllName) {
    if ($("#" + controllName).val() != "") {
        $("#msg" + controllName).hide();
    }
}

// 基础日期格式校验
function DateValidate(dateVal) {
    var resultDate = true;
    var DocDate = dateVal.split("-");
    var day = DocDate[0];
    var month = DocDate[1];
    var year = DocDate[2];
    
    // 校验日、月、年的格式规则
    if (day != undefined && (day > 31 || day.length != 2)) {
        resultDate = false;
    }
    if (month != undefined && (month > 12 || month.length != 2)) {
        resultDate = false;
    }
    if (year != undefined && (year.length != 4)) {
        resultDate = false;
    }

    // 检查是否包含斜杠分隔符
    var str2 = "/";
    if (dateVal.indexOf(str2) != -1) {
        resultDate = false;
    }
    return resultDate
}

// 完整日期验证逻辑
function DateContVali(controllName) {
    debugger;
    var inputVal = $("#" + controllName).val();
    if (inputVal != "") {
        if (!DateValidate(inputVal)) {
            $("#msg" + controllName).text('日期格式应为DD-MM-YYYY')
            $("#msg" + controllName).show();          
            ResetDatePicker(controllName);
            localStorage.removeItem('Val');
            return;
        }
        else {
            var storedVal = localStorage.getItem("Val");
            if (storedVal === null || storedVal === '') {
                $("#msg" + controllName).hide();
            }
            else {
                // 校验存储值的长度、日期范围和格式
                if (storedVal.length != 10) {
                    $("#" + controllName).val("");
                    $("#msg" + controllName).text('日期格式应为DD-MM-YYYY');
                    $("#msg" + controllName).show();
                } else if (storedVal.split("-")[0] > 31 || storedVal.split("-")[1] > 12) {
                    $("#" + controllName).val("");
                    $("#msg" + controllName).text('日期格式应为DD-MM-YYYY');
                    $("#msg" + controllName).show();
                }
                else if (!(storedVal.match(/^(0?[1-9]|[12][0-9]|3[01])[-](0?[1-9]|1[012])[-]\d{4}$/))) {
                    $("#" + controllName).val("");
                    $("#msg" + controllName).text('日期格式应为DD-MM-YYYY');
                    $("#msg" + controllName).show();
                }
                else {
                    $("#msg" + controllName).hide();
                }
                localStorage.removeItem('Val');               
            }
        }
    }
    else {
        $("#msg" + controllName).hide();
        var storedVal = localStorage.getItem("Val");
        if (storedVal === null || storedVal === '') {
            $("#msg" + controllName).hide();
        }
        else {
            if (storedVal.length != 10) {
                $("#" + controllName).val("");
                $("#msg" + controllName).text('日期格式应为DD-MM-YYYY');
                $("#msg" + controllName).show();
            } else if (storedVal.split("-")[0] > 31 || storedVal.split("-")[1] > 12) {
                $("#" + controllName).val("");
                $("#msg" + controllName).text('日期格式应为DD-MM-YYYY');
                $("#msg" + controllName).show();
            }
            else if (!(storedVal.match(/^(0?[1-9]|[12][0-9]|3[01])[-](0?[1-9]|1[012])[-]\d{4}$/))) {
                $("#" + controllName).val("");
                $("#msg" + controllName).text('日期格式应为DD-MM-YYYY');
                $("#msg" + controllName).show();
            }
            else {
                $("#msg" + controllName).hide();
            }
            localStorage.removeItem('Val');
        }
    }
}

内容的提问来源于stack exchange,提问作者Gagan Thakral

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:18:14