萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> 驗證用戶名的正則表達式

驗證用戶名的正則表達式

  求一個驗證用戶名的正則表達式
各位大哥大姐,晚輩求一個驗證用戶名的正則表達式,苦苦思索了一個星期還是沒有弄出來,本人愚鈍,還望大家指教!
VBscript編程要求用戶名的字符控制在3至20個之間,由中文、大小寫字母、數字、下劃線、小數點、減號組成, 必須以中英文或數字開頭結尾且下劃線、小數點、減號這三個字符中的其中一個的組合不能是連續的 a__a或a--a或a..a 這樣的,但可以 a_a.a_a.a_a-a-a-a_a-a.a.a.a這樣的。
如果超出這個范圍則用戶名不通過。
就是一直弄不明白下劃線、小數點、減號這三個字符中的其中一個的組合的問題,頭都大了
此為不符合的正則: 
^.{0,2}$|.{21,}|^[^A-Za-z0-9u4E00-u9FA5]|[^wu4E00-u9FA5.-]|([_.-])1 

<script language=vbscript> 

function regtest(str) 

Set re = New RegExp 

re.Pattern = "^.{0,2}$|.{21,}|^[^A-Za-z0-9u4E00-u9FA5]|[^wu4E00-u9FA5.-]|([_.-])1" 

  if re.Test(str) then 

  msgbox("不符合") 

  else 

  msgbox("符合") 

  end if 

end function 

</script>

<input id=strs value="a_a.a_a.a_a-a-a_a-a" size=40>

<input type=button onclick=regtest(strs.value) value="檢查">

(?!pattern) 
負向預查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字符之後開始

copyright © 萬盛學電腦網 all rights reserved