【问题标题】:Regular Expressions age validation 17-120 [duplicate]正则表达式年龄验证 17-120 [重复]
【发布时间】:2019-06-10 00:24:08
【问题描述】:

我需要做一个正则表达式来验证 17-120 之间的年龄包括(17 和 120)

我试过了

^(100|[1-9][7-9][0-9]?)$

我知道这不好,但我不明白怎么做

我需要在我的表单中使用模式属性填写年龄

只允许数字

【问题讨论】:

    标签: html regex


    【解决方案1】:

    你应该把所有可能的组合放在交替列表中:

    ^(?: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

    【讨论】:

    • 如果它在 17 到 1000000 之间怎么办?你真的会把所有可能的组合都放进去吗??
    • 是的,这也很简单:^(?:1[7-9]|[2-9][0-9]|[1-9][0-9]{2,5}|1000000)$(演示:regex101.com/r/6SzInz/2)。不管范围有多大,你只需要几个模式来覆盖边界条件,其他所有的东西都可以用一个模式来覆盖。
    • 在某些基于表单的应用程序的验证中有时需要使用正则表达式,您不能使用数学表达式来指定范围。
    【解决方案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 对这个特定案例所说的那样做,但从更一般的意义上说,在许多情况下可能会非常乏味。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 2018-02-26
      • 1970-01-01
      • 2019-12-28
      相关资源
      最近更新 更多