2017-04-14 71 views
2

我試圖讓最少6個字符,最多15個字符。首先必須是字母數字(不特殊),下一個(最多)13爲字母數字,並且可以包含NON CONSECUTIVE(並且每次只包含下列之一)下劃線或句點或連字符,則最後一個字符必須是字母數字。好嗎PCRE正則表達式非連續重複

例如:A_3.hj_3J

例如不行:F__3d66.K

例如不行:6 _sd.6h9

這是我到目前爲止,我覺得它很近但很煩人。 我在做什麼錯?

^[a-zA-Z0-9]{1}([_.-]?[a-zA-Z0-9])\S{4,13}[a-zA-Z0-9]{1}$ 
+0

另一個想法與*字邊界*:['^ \ b(?!。*?[._-] {2})[\ w.-] {6,15} \ b $'](https://regex101.com/r/zFWXcK/1) –

+1

@bobblebubble:你的正則表達式也會允許'_13.hj_3_' – anubhava

+0

@anubhava好抓!我忽略了這個(: –

回答

2

有兩個問題:

  1. 你的正則表達式模式也將匹配的超過15個字符的輸入。
  2. 你的正則表達式會像@#中間由於使用的\S

還包括其他非允許的字符可以通過使用負先行不允許連續發生修復週期/連字符/下劃線和從正則表達式中刪除\S,允許任何非空格字符

^[a-zA-Z0-9](?!.*[_.-]{2})[\w.-]{4,13}[a-zA-Z0-9]$ 

RegEx Demo

+0

)倒數第二個字符使它失敗:( a-dFegv_f – T1960CT

+0

好的,我現在已經糾正了它 – anubhava

+1

它可以工作,而且看起來比另一個更簡單 謝謝@anubhava,I這已經持續了幾個小時,並且越來越少了! – T1960CT