正则表达式前2个字符或者字母或数字,但不是两者的组合

问题描述:

我需要PHP中的正则表达式来验证字符串,如“AB345678”或“12345678”。也就是说,八(8)个字母串包含前两个字母作为字母或数字,但不是两者的组合,然后是剩余的6个数字字母。 我试图用我自己的方式做,但它不工作。正则表达式前2个字符或者字母或数字,但不是两者的组合

这里是我的代码:

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

我是新来的正则表达式,因此需要在这里帮助。

在此先感谢。

使用|(又名交替操作或管道运营商)说 '无论是左侧还是右侧':

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

+0

Hi Patata, 感谢您的快速回复。 你的解决方案像魅力一样工作。 :) – 2013-04-18 07:00:42

+0

我建议使用非捕获组,因为您不需要捕获组的结果。 '(:[0-9] {2} | [A-ZA-Z] {2}?)'。 – 2013-04-18 07:18:16

你可以做到这一点

^([a-zA-Z]{2}|\d{2})\d{6}$ 
+0

这不符合OP的愿望。他只想要最后六位数字。 – Patashu 2013-04-18 06:54:52

+1

你不需要为此留下后顾之处,他不需要从比赛中排除的前缀。 – Barmar 2013-04-18 06:55:27

+0

@all edited the ans .. – Anirudha 2013-04-18 06:57:25

/^ \d{8} | (?: [a-zA-Z]{2} \d{6}) $ /x 
+1

格式化您的代码!请在你的答案上展开,代码只是答案不理想。 – 2013-04-18 07:19:45

为了与Unicode兼容:

^(?:\pL{2}|\pN{2})\pN{6}$ 

用PHP:

if (preg_match('/^(?:\pL{2}|\pN{2})\pN{6}$/u', $string)) { 
    echo "OK"; 
} 
  • \pL代表任何字母。
  • \pN代表任何数字。
+0

number =/=数字 – hakre 2013-04-18 07:41:30