我想在php中編寫一個正則表達式來檢查以確保傳遞的字符串是三件事情之一,但是我很難(我真的與正則表達式鬥爭)。正則表達式幫助
我需要確保我收到的參數包含的這三樣東西之一,而不是其他:
- 「|」這就是它只是一個單一的管道或
- 「」這就是它只是一個空字符串或
- 「| 1 | 534 | 3453 | 23 | 213 | 2 |」使用管道作爲分隔符爲一系列數字
謝謝你的幫助的長字符串(這是不斷地給我出了問題,覺得我需要在正則表達式專門買了一本書)
我想在php中編寫一個正則表達式來檢查以確保傳遞的字符串是三件事情之一,但是我很難(我真的與正則表達式鬥爭)。正則表達式幫助
我需要確保我收到的參數包含的這三樣東西之一,而不是其他:
謝謝你的幫助的長字符串(這是不斷地給我出了問題,覺得我需要在正則表達式專門買了一本書)
preg_match('/^(?:\|(?:\d+\|)*)?$/', $input);
字符的性格,與我的答案完全一樣。太慢了。 – sdleihssirhc 2011-01-28 19:20:01
要做到這一點是將其分割成三個獨立的檢查,最簡單的方法:
strcmp($str,"|") == 0
)strlen($str) == 0
)。/^[0-9\|]+$/
不要使它比更難它需要通過嘗試所有這些支票塞進一個正則表達式。你的代碼會更容易被理解,你的代碼的未來維護者會感謝你。
編輯:只是爲了顯示我在說一下,這裏的一些示例代碼:
if(strcmp($str,"|") == 0 ||
strlen($str) == 0 ||
preg_match('^[0-9\|]+$', $str) {
...
}
VS
if(preg_match('/^(?:\|(?:\d+\|)*)?$/', $str) {
...
}
一目瞭然,其中一個執行...
如果$str
是空?
(^(\ |)([0-9 \ |] {0,})(\ |)$)|(^(\ |)$)|()
使用上述正則表達式,並且如果沒有mathches你的字符串是無效的,othervise其有效,並嘗試檢查空str_len($ string)> 0然後檢查正則表達式
我可以建議[掌握正則表達式](http://oreilly.com/catalog/9780596528126)(也就是貓頭鷹書) – 2011-01-28 19:18:19
有兩件事可以幫助你閱讀正則表達式。本教程:http://www.regular-expressions.info/tutorial.html和這個動作網站來嘗試你的正則表達式:http://gskinner.com/RegExr/ – 2011-01-28 19:27:50