我試圖匹配字母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