【问题标题】:RegEx for validating three alphanumeric conditionsRegEx 用于验证三个字母数字条件
【发布时间】:2019-05-13 18:45:13
【问题描述】:

我的当前正则表达式可以正常工作:

^[a-zA-Z]{2}[0-9]{8}$

它适用于仅包含 2 个字母后跟 8 个数字的现有模式,例如 AB12345678 或 yZ01928374

我需要将其更改为满足 3 个条件的新正则表达式:

1) 如果前2个字母后面跟一个数字“9”,那么后面可以跟7个或8个数字[0-9]{7,8}。例如AB91234567AC912345678 都是有效的。

2) 如果前 2 个字母后跟一个 0-5 之间的单个数字,那么它后面可以紧跟 8 个数字 [0-9]{8}。比如AB412345678

3) 如果前 2 个字母后跟 6-8 之间的数字,那么它可以紧跟 7 位数字[0-9]{7}。比如AB71234567

我有一些零碎的东西,但我真的不确定如何将所有 3 个条件放在一起以 1 个不错的表达式。

【问题讨论】:

  • 顺便说一句,这是我想出的,但我知道它是否真的有效:^[a-zA-Z]{2}+(9\d[0-9]{7 ,8}|\d[0-5]{1}\d[0-9]{8}|\d[6-8]{1}\d[0-9]{7})$
  • 这里缺少一个替换 |\d[6-8]{1}\d|[0-9]{7})$,除了它看起来不错并且不需要 +
  • 您基本上需要交替处理您的三个案例。检查我的answer 以及解释和演示。而且您在 cmets 中提到的正则表达式有点不正确。在{2} 之后不需要+,也不需要同时写\d[0-9],而只需要写\d[0-9] 来代表一个数字。

标签: javascript regex regex-lookarounds regex-group


【解决方案1】:

您可以使用alternation 并为前两个字母后跟的值添加所需的规则

let test = ['AB91234567','AB412345678','AB912','ABC123']

test.forEach( value => {
  console.log(/^[a-zA-Z]{2}(?:9\d{7,8}|[0-5]\d{8}|[6-8]\d{7})$/.test(value))
})

【讨论】:

    【解决方案2】:

    您可以使用交替来定义不同的条件并使用此正则表达式,

    ^[a-zA-Z]{2}(?:9[0-9]{7,8}|[0-5][0-9]{8}|[6-8][0-9]{7})$
    

    说明:

    • ^ - 字符串开始
    • [a-zA-Z]{2} - 匹配两个字母
    • (?: - 非分组模式的开始
    • 9[0-9]{7,8} - 如果下一个数字是 9,那么后面可以跟 7 到 8 个数字
    • | - 交替
    • [0-5][0-9]{8} - 如果下一位数字是零到五,那么它只能有八位数字
    • | - 交替
    • [6-8][0-9]{7}) - 如果下一位是六到八位,那么它只能有七位数字和非组模式的结尾
    • $ - 字符串结束

    Regex Demo

    JS 代码演示,

    const arr = ['ab91234567','ab912345678','ab9123456789','sd012345678','sd0123456789','df71234567','df712345678']
    
    arr.forEach(x => console.log(x + " --> " + /^[a-zA-Z]{2}(?:9[0-9]{7,8}|[0-5][0-9]{8}|[6-8][0-9]{7})$/.test(x)))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多