正则表达式:前两个字符中的至少一个必须是字母

时间:2018-07-17 17:35:31

标签: regex


我正在搜索涵盖此用例的正则表达式:

  • 字符串的长度是8
  • 前两个字符“可以”包含1个数字,其余6个字符是数字
  • 不允许以两位数开头

示例:

  • AB123456->很好
  • 1A789563->很好
  • A2547896->很好
  • 11111111->不好

我尝试过:

/^[a-zA-Z]{2}\d{6}$/

但这在开头允许两位数字。 谢谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您可以使用“详细说明”的正则表达式方法,在其中将grouping constructalternation operators一起列出所有可能的变体:

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

或者,如果您的正则表达式引擎支持先行

^(?![0-9]{2})[0-9a-zA-Z]{2}[0-9]{6}$

请参见first regex demosecond regex demo

^在字符串的开头声明位置,然后(?:[a-zA-Z][0-9]|[0-9][a-zA-Z]|[a-zA-Z]{2}) non-capturing group匹配一个字母+数字,数字+字母或仅两个字母。然后,[0-9]{6}匹配6位数字直到字符串($)的末尾。

第二个正则表达式匹配字符串(^)的开头,如果前两个字符是数字((?![0-9]{2})),则匹配失败,然后匹配两个字母数字字符([0-9A-Za-z]{2} ),然后是六个数字([0-9]{6}),并在字符串($)的末尾声明位置。