2010-09-17 74 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修改,使 匹配不區分大小寫。
相關問題