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
相关产品推荐
相关产品推荐

