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

JavaScript生日验证问题:正则表达式格式异常排查

解决JavaScript生日格式(mm/dd/yyyy)校验问题

你的代码问题主要出在正则表达式的定义和规则上,直接调整以下几点就能解决:

核心问题分析

  • 你把正则表达式写成了带单引号的字符串,JavaScript里正则字面量不需要加引号,用字符串定义会导致test方法按字符串匹配,而非正则规则匹配。
  • 原正则末尾的*会允许空值或重复的日期片段,不符合单一生日的校验需求。
  • 年份规则(19|20)?[0-9]{2}允许两位年份,不符合yyyy的格式要求。

修正后的代码

if(birth === "") {
    printError("birthErr", "Please enter your birthday");
} else {
    // 用正则字面量定义,修正年份规则,移除多余的*
    var regex = /^(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9]{2}$/;                 
    if(!regex.test(birth)) {
        printError("birthErr", "Please enter a valid birthday (mm/dd/yyyy)");
    } else {
        printError("birthErr", "");
        birthErr = false;
    }
}

额外严谨性优化

如果要避免2月30日这类逻辑无效的日期,可以在正则校验通过后,再用Date对象验证日期有效性:

// 正则校验通过后添加这段逻辑
var parts = birth.split(/[- /.]/);
var date = new Date(parts[2], parts[0]-1, parts[1]);
if(date.getFullYear() !== parseInt(parts[2]) || date.getMonth() !== parseInt(parts[0])-1 || date.getDate() !== parseInt(parts[1])) {
    printError("birthErr", "Please enter a valid actual date");
    birthErr = true;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:05:21