2013-08-01 46 views
0

我環顧四周,我發現了很多教程。但他們都不能幫助我的情況。 這裏是我的腳本:如何使用preg_match不允許在前面和最後的空間,但允許在

if(!preg_match('/^[[email protected]#$%]+$/',$user_name)) { 
    echo"bad username"; 
} 

此代碼不允許任何空間無論在了前面,最終還是在噹噹之間什麼。

我只想之間,但不允許在前端和中端。

任何人都可以幫我嗎?

+0

如果您要檢查在字符串中的第一和/或最後一個字符是否是空格,你也可以使用字符串函數像'strpos'或'substr'。 – ironcito

回答

3

位你有

[[email protected]#$%] 

匹配任何這些字符的+指一個或多個。如果你想匹配或空間,只需添加一個空格到列表中,並且之前和現有的一個後放置一個分組,像這樣:

/^[[email protected]#$%][[email protected]#$% ]+[[email protected]#$%]$/ 

這樣做的副作用將是用戶名必須至少需要3個字符。如果你想允許較小的用戶名,你可能分裂檢查:

if(!preg_match('/^[[email protected]#$% ]+$/',$user_name) || preg_match('/^ /',$user_name) || preg_match('/ $/',$user_name)) { 

!preg_match('/^[[email protected]#$% ]+$/',$user_name)確保用戶名只包含批准的字符,該preg_match('/^ /',$user_name)檢查,看它是否以空格開始,和preg_match('/ $/',$user_name)檢查,看看如果它以一個空格結束。

如果你想接受輸入的內容,並自動刪除任何開頭或結尾的空格,使用trim功能。

2

使用修剪而不是省略文字的左邊和右邊的空格。

<?php 
$username = trim($username); 

//your code... 
?> 
+0

我打算在5分鐘前提出建議,但他希望他preg_match仍然允許在兩者之間的空格,現在它不會。這並不能真正解決他的正則表達式。 –