18-65岁年龄范围的Regex验证器需求及现有正则评估咨询
评估与优化你的年龄验证正则表达式
咱们先拆解下你写的正则 ^(1[90]|[2-6][0-9])$,它存在两个关键问题,没法完全覆盖18-65岁的需求:
- 第一个分支
1[90]只能匹配10、19,漏掉了18这个起始年龄; - 第二个分支
[2-6][0-9]会匹配20-69,这就把66-69也包含进来了,超出了65岁的上限。
优化后的正则表达式
针对18-65岁的范围,我们可以把年龄分成三个区间来精准匹配:
^(1[89]|[2-5][0-9]|6[0-5])$
各分支解释
1[89]:匹配18、19这两个起始年龄;[2-5][0-9]:匹配20-59岁的所有两位数;6[0-5]:匹配60-65岁的上限区间。
验证边界情况
这个正则能正确匹配:
- 最小年龄18、最大年龄65;
- 中间的所有合法年龄(比如25、50、63)。
同时会拒绝:
- 小于18的数(17、10);
- 大于65的数(66、70);
- 非两位数(比如5、100,不过如果你的输入已经限制是两位数,这部分可以不用额外考虑)。
如果你的输入场景可能出现三位数(比如用户误输入100),当前正则的^和$已经做了严格的边界控制,确保整个字符串就是匹配的年龄,所以不用额外调整。
内容的提问来源于stack exchange,提问作者Sindiso Dube
相关产品推荐
相关产品推荐

