【发布时间】:2019-06-10 00:24:08
【问题描述】:
我需要做一个正则表达式来验证 17-120 之间的年龄包括(17 和 120)
我试过了
^(100|[1-9][7-9][0-9]?)$
我知道这不好,但我不明白怎么做
我需要在我的表单中使用模式属性填写年龄
只允许数字
【问题讨论】:
我需要做一个正则表达式来验证 17-120 之间的年龄包括(17 和 120)
我试过了
^(100|[1-9][7-9][0-9]?)$
我知道这不好,但我不明白怎么做
我需要在我的表单中使用模式属性填写年龄
只允许数字
【问题讨论】:
你应该把所有可能的组合放在交替列表中:
^(?:1[01][0-9]|120|1[7-9]|[2-9][0-9])$
演示:https://regex101.com/r/6SzInz/1
基本上每个边界条件都需要一个模式:
1[7-9] 涵盖 17 到 19 之间的数字[2-9][0-9] 涵盖 20 到 99 之间的数字1[01][0-9] 涵盖 100 到 119 之间的数字120 涵盖了这个数字... 120【讨论】:
^(?:1[7-9]|[2-9][0-9]|[1-9][0-9]{2,5}|1000000)$(演示:regex101.com/r/6SzInz/2)。不管范围有多大,你只需要几个模式来覆盖边界条件,其他所有的东西都可以用一个模式来覆盖。
您无法使用正则表达式完全实现这一点。使用正则表达式,您可以检查字符串是否遵循特定的模式,即“字符串的外观”如果需要。
例如,^[0-9]{2,3}$ 是一个正则表达式,用于检查输入是否仅包含两个或三个数字/数字。
对于“17 到 120 之间”部分,我猜你需要使用 JS 的 if 语句,类似这样:
if(age <= 120 && age >= 17) {
//accept, and do your stuff
}
else {
//show some validation error
}
编辑:当然,您可以按照@blhsing 对这个特定案例所说的那样做,但从更一般的意义上说,在许多情况下可能会非常乏味。
【讨论】: