正则表达式,用于验证三个字母数字条件

时间:2019-05-13 18:45:13

标签: javascript regex regex-lookarounds regex-group

我拥有当前工作正常的正则表达式:

^[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个条件放到一个漂亮的表达式中。

2 个答案:

答案 0 :(得分:3)

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

^[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})-如果下一位数字是6到8,则只能包含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)))

答案 1 :(得分:3)

您可以使用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))
})