2016-01-07 94 views
0

我想看看用戶都在使用的話adminusername在其可能的用戶名字符串的任何地方。如果用戶要使用admin,或I am admin,或my admin namemy username,因爲他們的用戶名如何串之間是否匹配確切的詞用PHP正則表達式

所以,我希望我的正則表達式來檢測它。如果他使用adminmember我可以忍受,不要檢測它。我也希望檢測不區分大小寫。

到目前爲止,我得到了這一點,但它不是真正的工作,因爲我想,因爲它會檢測的話,它不應該:

/^[admin|username]+$/i

這將匹配甚至adm,它不該」噸。我嘗試過使用單詞界限,但是我也無法使其工作,也許我做錯了什麼。正如你在我的問題中所看到的,我想在字符串的任何位置檢測字符管理,但如果它是某個字的一部分,我可以跳過它。

在此先感謝。

+0

用戶名會用空格。希望它不帶空格 –

+0

@Venkatraman我允許的空間,爲什麼你認爲它是壞的? – offline

+0

如果用戶的顯示名稱是好的,但如果它的用戶唯一標識不是在數據庫級索引好 –

回答

2

正則表達式中的方括號不用於分組,它們用於指定字符類;分組是用圓括號完成的。你不想用錨和^$正則表達式,因爲這將只匹配在開始和結束的字符串;你想用\b來匹配單詞邊界。

/\b(admin|username)\b/i 
+0

是的,這個工作正如我想要的。感謝您的解釋。 – offline

+0

作者說他想區分大小寫,所以你應該刪除尾部*我* – Covik

1

看看使用單詞邊界的話:

/\b(?:admin|username)\b/i 

,如果有例如匹配返回錯誤

if (preg_match('/\b(?:admin|username)\b/i', $input)) { 
    die("Invalid Input"); 
} 
1

嘗試下面的代碼段保持Array你的詞彙列表。

$input = "im username "; 
$spam_words = array("admin", "username"); 
$expression = '/\b(?:' . implode($spam_words, "|") . ')\b/i'; 

if (preg_match($expression, $input)) { 
    die("Username contains invalid value"); 
} 
else { 
    echo "Congrats! is valid input"; 
} 

工作小提琴網址:
http://sandbox.onlinephpfunctions.com/code/6f8e806683c45249338090b49ae9cd001851af49

+0

這是一個好主意,保持這個列表集中。謝謝 – offline

0

這可能是你正在尋找的模式:

'#(^|\s){1}('. $needle .')($|\s|,|\.){1}#i' 

一些細節取決於要應用的限制。

+1

你回答什麼問題? – Toto

相關問題