2016-06-09 61 views
2

我試圖讓JavaScript的用戶名驗證的正則表達式Javascript正則表達式「無效的組」?

' ^(?=.{4,16}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$ 
' └─────┬────┘└───┬──┘└─────┬─────┘└─────┬─────┘ └───┬───┘ 
'  │   │   │   │   no _ or . at the end 
'  │   │   │   │ 
'  │   │   │   allowed characters 
'  │   │   │ 
'  │   │   no __ or _. or ._ or .. inside 
'  │   │ 
'  │   no _ or . at the beginning 
'  │ 
'  username is 4-16 characters long 

當我使用它在鈦的Appcelerator我得到這個錯誤

[ERROR] : Error generating AST for "***register.js" 
[ERROR] : Invalid regular expression: /^(?=.{4,16}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$/: Invalid group 
[ERROR] : Alloy compiler failed 

我的代碼:

var regex = /^(?=.{4,16}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$/; 

     if (!regex.test(e.value)) 
     { 
      inputs.Username.borderColor = 'red'; 
      inputs.Username.backgroundColor = '#edcaca'; 
      return false; 
     } 

任何想法爲什麼它給錯誤無效組?

回答

5

這可能會爲你工作:

/^(?=.{4,16}$)(?![_.])(?!.*[_.]{2})[a-z0-9._]+[a-z0-9]$/i 

或避免大部分的向前看符號的:

/^(?!.*[_.]{2})[a-z0-9][a-z0-9._]{2,14}[a-z0-9]$/i 

Try it online

的問題是,lookbehinds(正(?<=...)和負(?<!...))不由JavaScript支持。

+1

刪除了我的。 。 。你已經有了一個好的解決方案。 :) – talemyn

+0

解決方案+問題解答,最佳答案,,,,謝謝:)你瘋了我的日子 – Jack

+0

@NinjaDevelopers我很高興它幫助你:-)。通常可以像上面那樣避免逆序倒序。 – andlrc

3

JavaScript的正則表達式引擎不支持lookbehind(?<![_.])

+0

我不明白的「不支持向後看」,你的意思是這部分? '(?![_。])' – Jack

+1

'(?<!...)'是一個負向倒序,不幸的是不支持。 –

相關問題