我拥有当前工作正常的正则表达式:
^[a-zA-Z]{2}[0-9]{8}$
它适用于正好包含2个字母和8位数字的现有模式,例如AB12345678或yZ01928374
我需要将其更改为满足3个条件的新正则表达式:
1)如果前2个字母后跟一个数字“ 9”,则可以后跟7或8个数字[0-9]{7,8}
。例如AB91234567
或AC912345678
都有效。
2)如果前2个字母后跟0-5之间的一位数字,则可以紧跟8位数字[0-9]{8}
。例如AB412345678
3)如果前2个字母后跟6到8之间的数字,则可以紧随其后的是7个数字[0-9]{7}
。例如AB71234567
我有些零散,但我真的不确定如何将所有3个条件放到一个漂亮的表达式中。
答案 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位数字,并且是非分组模式的结尾$
-字符串结尾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))
})