各位大哥大姐,晚輩求一個(gè)驗(yàn)證用戶名的正則表達(dá)式,苦苦思索了一個(gè)星期還是沒有弄出來,本人愚鈍,還望大家指教!
VBscript編程要求用戶名的字符控制在3至20個(gè)之間,由中文、大小寫字母、數(shù)字、下劃線、小數(shù)點(diǎn)、減號(hào)組成,必須以中英文或數(shù)字開頭結(jié)尾且下劃線、小數(shù)點(diǎn)、減號(hào)這三個(gè)字符中的其中一個(gè)的組合不能是連續(xù)的a__a或a--a或a..a這樣的,但可以a_a.a_a.a_a-a-a-a_a-a.a.a.a這樣的。
如果超出這個(gè)范圍則用戶名不通過。
就是一直弄不明白下劃線、小數(shù)點(diǎn)、減號(hào)這三個(gè)字符中的其中一個(gè)的組合的問題,頭都大了
此為不符合的正則:
^.{0,2}$|.{21,}|^[^A-Za-z0-9\u4E00-\u9FA5]|[^\w\u4E00-\u9FA5.-]|([_.-])\1
<script language=vbscript> function regtest(str) Set re = New RegExp re.Pattern = "^.{0,2}$|.{21,}|^[^A-Za-z0-9\u4E00-\u9FA5]|[^\w\u4E00-\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)
負(fù)向預(yù)查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預(yù)查不消耗字符,也就是說,在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開始