2016-06-12 80 views
1

我想在PHP中驗證用戶名並用正則表達式檢查它們。它們應該至少包含2個「真實」字符,如AÄs,15,但其他一些字符如._或者也應允許空格。所需字符的位置並不重要。正則表達式 - 需要一些字符,並只允許一些額外的?

這是我到目前爲止,並沒有不幸也讓...爲用戶名:

preg_match('/^[\pL\pN\s-+_.]+$/u', $value) 

我想只允許某些字符。例如,<#。 我該怎麼做?

+0

**必須**它包含'.','-',空格?或者它是可選的? – Shafizadeh

+0

不,它們應該是可選的 – haheute

回答

1

讓我們來看看...

  • 至少有兩個字母/數字:^(?:.*?[\p{L}\p{N}]){2}
  • 其他字符允許:^[-+.\w ]+$

讓我們結合一起,我們得到:

^(?=(?:.*?[\p{L}\p{N}]){2})[-+.\w ]+$ 

我用了lookahead用於檢查至少有2個必需字符的部分,並將其他所有內容放在模式的主要部分。總之,這可以讓您通過相同的輸入檢查兩種不同的條件。

+0

你能解釋這部分嗎?:。*?'? – haheute

+2

@haheute'(?= ...)'是一個前瞻,'(?:...)'是一個非捕獲組。'*?'匹配所有不貪婪的東西。現在你有搜索條件,你應該能夠弄清楚自己什麼每個人的確實做的:-) – andlrc

+1

@haheute,andlrc給了你答案 - 我只是指出你[regex101](https:// regex101。 com/r/mM7aE1/1),它可以將任何PCRE模式分解出來,如果你正在爲某些特性而苦苦掙扎(請看*解釋*部分)。 –

相關問題