2015-04-26 154 views
3

我一直在尋找2個小時,我仍然沒有得到它。 我需要評估帳戶名稱的輸入。它只能包含數字(0-9),字母(a-zA-Z)和點(.)。php preg_match只有數字,字母和點

其他一切都是禁止的。所以,沒有下劃線(_),加上(+)等等。

有效的帳戶應該看起來像,例如:

john.green 
luci.mayer89 
admin 

我試過很多的preg_match /正則表達式的例子,但我不明白這一點的工作。每當我做echo preg_match(...)我得到1true

$accountname = "+_#luke123*"; 
echo preg_match("/[a-z0-9.]/i", $accountname); 

//--> gives back 1 as true 

此外,這將是巨大的,以控制該帳戶名與至少2個字母或數字開頭,並以至少1字母或數字結尾 - 但我很遠,遠離這一點。

回答

5

您需要使用錨和量詞:

echo preg_match("/^[a-z0-9.]+$/i", $accountname); 

你的字符串+_#luke123*包含字母和數字,因此有一個匹配。如果我們告訴引擎只匹配整個字符串從開始(^)到結束($),我們將確保這不匹配。 +確保我們不僅捕獲1個,而且捕獲所有角色。

請參閱this demo,現在沒有匹配!

編輯: 既然你還需要檢查這些條件:

字符串必須以2個字母或數字,並用1個或 個字母或數字

結束我可以建議這^[a-z0-9]{2,}[a-z0-9.]*[a-z0-9]+$正則表達式(必須使用與i選項),這意味着:

  • 開始與2名或更多的字母或數字
  • 然後按照任何數量的數字,字母或週期
  • 和在1個或多個字母或數字結束。

Another demo

+0

完美! thx的解釋!現在我明白了^和$的含義。 你能幫我解答第二部分嗎?字符串必須以2個或更多字母或數字開頭,並以1個或多個字母或數字結尾(例如,lu.b很好,但「a。」或「.abc」必須失敗)? – Lox

+0

也許,這個'^ [a-z0-9] {2,} [a-z0-9。] * [a-z0-9] + $'(必須與'i'選項一起使用)就是你尋找?以2個或更多字母或數字開始,然後是任意數量的數字,字母或句點;並以一個或多個字母或數字結尾。 https://regex101.com/r/fL6qY7/3 –

+0

我試過這個,它似乎工作:'^ [a-z0-9] {2} [a-z0-9。] {0,} [a-z0-9] {1} + $' – Lox

相關問題