2013-02-09 42 views
1

我怎樣才能允許單preg_match下劃線?我如何只允許單個下劃線與preg_match?

我下面進行的正則表達式需要這不是我想要的雙下劃線...

if(!preg_match('/^[a-z0-9\s\_]+$/', $name)) 
    { 
     $error = true; 
     echo '<error elementid="name" message="name - please use alpha-numbers and lowercaps only." />'; 
    } 

例如,

​​

回答

3

包括_[]+允許倍數。您需要將其包圍在[]+中,但不要將其包含在裏面。整個結構被()+包圍以允許它的倍數,但它總是以字母,數字或空格結尾。

/^([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 
+0

非常感謝這,邁克爾! :-) – laukok 2013-02-09 16:34:13

+0

對不起,我剛剛發現'hellow_ world'不應該被包括在內......這可能嗎? – laukok 2013-02-09 16:37:38

+0

@lauthiamkok現在怎麼樣?它變得有點醜陋,並且可以從背後看到效果,但是很有效。 – 2013-02-09 16:40:05

相關問題