是否可以將兩種不同長度的字符串與preg_match
匹配?如果是,如何?使用preg_match匹配具有兩種不同固定長度的字符串
我正在尋找的是這樣的:由於
preg_match("/^[a-zA-Z0-9]{13|25}$/", $string);
,返回真,如果$string
拉斯正好無論是13 或 25個字符的長度。
P.S .:我知道應該是{13,25}
- {min,max}
- ,但我不感興趣在一個區間內匹配。
是否可以將兩種不同長度的字符串與preg_match
匹配?如果是,如何?使用preg_match匹配具有兩種不同固定長度的字符串
我正在尋找的是這樣的:由於
preg_match("/^[a-zA-Z0-9]{13|25}$/", $string);
,返回真,如果$string
拉斯正好無論是13 或 25個字符的長度。
P.S .:我知道應該是{13,25}
- {min,max}
- ,但我不感興趣在一個區間內匹配。
我知道你的問題是關於用正則表達式來完成的,但通常是儘可能避免使用正則表達式的最佳做法。幾個原因:
所以這裏是一個非正則表達式的方法。
if (in_array(strlen($string),array(13,25)) && ctype_alnum($string)) {
// good
} else {
// bad
}
喜歡的東西
preg_match("/^([a-zA-Z0-9]{13}|[a-zA-Z0-9]{25})$/", $string);
([a-zA-Z0-9]{13}|[a-zA-Z0-9]{25}
交替匹配任一長度13或25這是一個快速的方法:
preg_match('/^[a-zA-Z0-9]{13}([a-zA-Z0-9]{12})?$/', $string);
即使是這樣的特定情況?如果你必須匹配'/^[a-z0-9] */i',但是如果字符串的長度是固定的,我可以看到區別。 – Alex 2014-12-01 16:53:42
@Alex這不是說正則表達式*不能*在你的情況下完成工作,更重要的是是否使用正則表達式的原則和最佳實踐。一般來說,內置函數的性能會更好,一般而言,非正則表達式解決方案更靈活,更易於理解,就其他編碼人員而言,業務需求也會發生變化等。 – 2014-12-01 19:24:06
@Alex不會誤解我的意思..我是一個正則表達式的粉絲。這是完全性感的。但說實話,這是一個超級強大的工具,它的整體用途非常狹窄,從最佳實踐PoV – 2014-12-01 19:25:06