2010-09-17 51 views
4

我试图匹配字母C D F H I E1 E2 CR(不区分大小写),并提出了这个问题。它会匹配一个字母,但不会匹配E1 E2 CR。其实它应该。什么是正确的方法来做到这一点?将几个字母和字母与数字匹配

preg_match('/^([C]|[D]|[F]|[H]|[I]|[E1]|[E2]|[CR]?)$/','CR') 

回答

6

鉴于相当有限和具体设置你检查代码,我建议使用

in_array($inputvalue,array('C','D','F','H','I','E1','E2','CR')); 

,而不是一个正则表达式 - 它会运行速度比一个正则表达式更快,更容易下面并稍后修改。

+0

我喜欢这里的正则表达式的简单性。首先确保'strtoupper($ inputvalue)'。 – 2010-09-17 15:36:17

+0

感谢您指点我in_array函数。它比正则表达式要容易得多。 – Norman 2010-09-26 10:57:11

6

[...]限定character class,它告诉正则表达式引擎的类中的一个元件相匹配。因此,[E1]其实意味着匹配E或1。由于您想匹配E1E2,因此您可以将这些条件合并到E[12](即E后跟12)。此外,您可以通过将所有单个字母组合在一起来简化所有单个字母类另外,如果在模式结尾处添加/imodifier,则会使其不区分大小写。

preg_match('/^([CDFHI]|E[12]|CR)?$/i', 'CR'); 

注意,?在图案的端部,使前述组optional。请注意,通过将模式的一部分设置为可选(您似乎试图在您的问题中进行尝试)或整个模式可选(如我在解决方案中那样),一个空字符串将与此模式匹配。

4

用途:

preg_match('/^(C|D|F|H|I|E1|E2|CR)$/i','CR') 
  • 与单个字符一个字符类像 [x]是相同x
  • 使用i修改,使 匹配不区分大小写。
相关问题