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

Web开发新手求教:信用卡到期日期验证功能优化方案

完善信用卡到期日期验证的解决方案

Hey there! 作为Web开发新手,你已经迈出了不错的第一步——实现了基础的格式校验。接下来咱们把需要的额外验证都加上,让这个功能更严谨。

修改后的完整代码

<label for="expiration-date"> Card Expiration Date </label>
<input type="text" name="exp-date" id="date" placeholder="MM/DD/YYYY" required>
<button type="submit" class="submitbtn" onclick="return checkdate()">Submit</button>

<script>
function checkdate() {
    // 匹配MM-DD/YYYY格式,支持三种分隔符:- / .
    var dateReg = /^\d{2}([./-])\d{2}\1\d{4}$/;
    var dateInput = document.getElementById("date");
    var dateValue = dateInput.value.trim();

    // 1. 基础格式校验
    if (!dateValue.match(dateReg)) {
        alert("请输入正确的日期格式(如:MM/DD/YYYY)");
        return false;
    }

    // 拆分日期各部分:先获取分隔符,再拆分
    var separator = dateValue.match(/([./-])/)[1];
    var [monthStr, dayStr, yearStr] = dateValue.split(separator);
    
    // 转换为数字
    var month = parseInt(monthStr, 10);
    var day = parseInt(dayStr, 10);
    var year = parseInt(yearStr, 10);

    // 2. 校验月份合法性(1-12)
    if (month < 1 || month > 12) {
        alert("月份必须是1-12之间的数字");
        return false;
    }

    // 3. 校验日期合法性:根据月份判断最大天数,考虑闰年
    var maxDays;
    switch(month) {
        case 2:
            // 闰年判断:能被4整除但不能被100整除,或者能被400整除
            maxDays = (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0) ? 29 : 28;
            break;
        case 4: case 6: case 9: case 11:
            maxDays = 30;
            break;
        default:
            maxDays = 31;
    }
    if (day < 1 || day > maxDays) {
        alert(`该月份的日期范围是1-${maxDays}`);
        return false;
    }

    // 4. 检查日期是否过期:创建输入日期的对象(注意月份是0开始,所以减1)
    var inputDate = new Date(year, month - 1, day);
    // 获取当前日期,去掉时分秒,避免当天的日期被误判为过期
    var currentDate = new Date();
    currentDate.setHours(0, 0, 0, 0);

    if (inputDate < currentDate) {
        alert("该日期已过期,请输入有效的到期日期");
        return false;
    }

    // 所有校验通过
    return true;
}
</script>

新增验证的详细解释

  • 月份合法性校验:直接判断转换后的月份数字是否在1-12之间,避免出现00、13这类无效值。
  • 日期合法性校验:根据不同月份设置最大天数,同时处理闰年的二月(29天),确保输入的日期符合实际日历规则。
  • 过期检查:
    • 把输入的日期转换成Date对象(注意JavaScript的月份是0索引,所以要减1)。
    • 创建当前日期对象并清空时分秒,这样当天的日期不会被误判为过期(比如今天是5月15日,输入5月15日是有效的)。
    • 比较两个日期,如果输入日期早于当前日期,则提示过期。

小提示

如果是信用卡到期日期,其实很多场景只需要月份和年份(因为信用卡到期日默认是当月最后一天),如果你后续想简化成MM/YYYY格式,只需要调整正则和校验逻辑即可,有问题可以再问哦!

内容的提问来源于stack exchange,提问作者Vasilis Skentos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:22:40