2012-12-01 55 views
1

我需要一些正則表達式的幫助。我需要檢查登錄,登錄可以有字母,數字和下劃線。它必須至少有一個字母,並且可以在中心有一個下劃線。登錄的正則表達式(PHP)

現在我有這個:
^([a-z0-9_])+$/iu 但它允許以任何順序使用所有。

+0

確實'在center'意味着你不想在start..and下劃線以什麼順序做你想讓它是 – Anirudha

+0

是的,例如:'word_word',但不是'_word'或'word_' – Berny

+0

最多一個下劃線,還是多個? –

回答

3

試試這個位置:

^(?<=[a-z])(?<=[0-9])[a-z0-9]+(_[a-z0-9]+|)$/iu 

所以必須有一個字母或數字開頭至少一次。這可以選擇來至少一個字母/數字或任何instad。

(?<=[a-z])是一個正面的後顧斷言這意味着一個字母必須在裏面。

+0

這是很好用下劃線,但它只允許使用數字。 – Berny

+0

@ user1821941你是對的,我做了一個更新。 – rekire

+0

現在不允許僅使用字母 – Berny

1

我猜你正在尋找這個

^(?=[a-zA-Z\d].*)(?=.*[a-zA-Z])(?=.*[a-zA-Z\d]$)(?=[^_]*(_)?[^_]*$)[a-zA-Z\d_]+$ 
    --------------- ------------ ---------------- --------------- 
     |    |    |    |->this checks that there is 0 to 1 occurance of _ 
     |    |    |->this checks if it ends with any of [a-zA-Z\d] 
     |    |->this checks if there is atleast 1 alphabet 
     |->this checks that it starts with [a-zA-Z\d] 

測試here

+0

它也可以工作,但來自rekire的變體更好,因爲它更小。但是,也謝謝你! – Berny

+0

@ user1821941是rekire解決方案很小很甜,但我總是在多個匹配中使用'lookahead'..this確保'regex'巨大,但您可以稍後進行調試而不會出現任何混淆 – Anirudha