包括_
內[]+
允許倍數。您需要將其包圍在[]+
中,但不要將其包含在裏面。整個結構被()+
包圍以允許它的倍數,但它總是以字母,數字或空格結尾。
/^([a-z0-9\s]+_?[a-z0-9]+[a-z0-9\s]+)+$/i
其分解:
- 外
()+
使得整個結構的倍數
[a-z0-9\s]+
多個字母,數字,空格(不強調
_?[a-z0-9]+
可選單強調內部多個字母/數字/空格,但後面沒有空格
- 個
[a-z0-9\s]+
多個字母,數字,到了最後空間(不能以下劃線結束)
/i
不區分大小寫(刪除i
如果你需要區分大小寫)
// Updated to prevent space after underscore
$patt = '/^([a-z0-9\s]+_?[a-z0-9]+[a-z0-9\s]+)+$/i';
echo preg_match($patt, 'hello world');
// 1
echo preg_match($patt, 'hello_world');
// 1
echo preg_match($patt, 'hello_world_');
// 0
echo preg_match($patt, 'hello__world');
// 0
echo preg_match($patt, 'hello_world how_are you');
// 1
echo preg_match($patt, 'hello_world how_are you_');
// 0
echo preg_match($patt, 'hello_world__ how_are you_');
// 0
echo preg_match($patt, 'hello_world how_ are you');
// 0
非常感謝這,邁克爾! :-) – laukok 2013-02-09 16:34:13
對不起,我剛剛發現'hellow_ world'不應該被包括在內......這可能嗎? – laukok 2013-02-09 16:37:38
@lauthiamkok現在怎麼樣?它變得有點醜陋,並且可以從背後看到效果,但是很有效。 – 2013-02-09 16:40:05