我试图匹配字母C D F H I E1 E2 CR(不区分大小写),并提出了这个问题。它会匹配一个字母,但不会匹配E1 E2 CR。其实它应该。什么是正确的方法来做到这一点?将几个字母和字母与数字匹配
preg_match('/^([C]|[D]|[F]|[H]|[I]|[E1]|[E2]|[CR]?)$/','CR')
我试图匹配字母C D F H I E1 E2 CR(不区分大小写),并提出了这个问题。它会匹配一个字母,但不会匹配E1 E2 CR。其实它应该。什么是正确的方法来做到这一点?将几个字母和字母与数字匹配
preg_match('/^([C]|[D]|[F]|[H]|[I]|[E1]|[E2]|[CR]?)$/','CR')
鉴于相当有限和具体设置你检查代码,我建议使用
in_array($inputvalue,array('C','D','F','H','I','E1','E2','CR'));
,而不是一个正则表达式 - 它会运行速度比一个正则表达式更快,更容易下面并稍后修改。
[...]
限定character class,它告诉正则表达式引擎的类中的一个元件相匹配。因此,[E1]
其实意味着匹配E或1。由于您想匹配E1
和E2
,因此您可以将这些条件合并到E[12]
(即E
后跟1
或2
)。此外,您可以通过将所有单个字母组合在一起来简化所有单个字母类另外,如果在模式结尾处添加/i
modifier,则会使其不区分大小写。
preg_match('/^([CDFHI]|E[12]|CR)?$/i', 'CR');
注意,?
在图案的端部,使前述组optional。请注意,通过将模式的一部分设置为可选(您似乎试图在您的问题中进行尝试)或整个模式可选(如我在解决方案中那样),一个空字符串将与此模式匹配。
用途:
preg_match('/^(C|D|F|H|I|E1|E2|CR)$/i','CR')
[x]
是相同x
i
修改,使 匹配不区分大小写。
我喜欢这里的正则表达式的简单性。首先确保'strtoupper($ inputvalue)'。 – 2010-09-17 15:36:17
感谢您指点我in_array函数。它比正则表达式要容易得多。 – Norman 2010-09-26 10:57:11