js正則表達式 必須包含數字、字母、特殊字符

js正則表達式要求:

1. 必須包含數字、英文字母、特殊符號且大於等於8位

2. 特殊符號包括: ~!@#$%^&*


正則表達式如下:

/^(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*])[\da-zA-Z~!@#$%^&*]{8,}$/


解釋:

這裏主要用到了js正則表式中的正向前瞻 ?=,舉個例子

/\d/.exec( 'abc2abc' ) 匹配結果爲2,釋義:匹配一個數字

/\d(?=a)/.exec( 'abc2abc' ) 匹配結果爲2,釋義:匹配一個數字,但是這個數字後面必須跟着字母a

/\d(?=a)/.exec( 'abc2bc' ) 匹配結果爲null

由此可以看出,?= 匹配結果中不包含它所匹配的字符,但是待匹配字符串必須符合它所對應的規則


當有多個正向前瞻規則時它們是並列的,不是串行的,比如

/\d(?=a)(?=b)/.exec( 'abc2abc' ) 匹配結果爲null,那如果想匹配一個數字,後面必須跟着字母a和b可以這樣寫

/\d(?=a)(?=.b)/.exec( 'abc2abc' ),當然這是爲了演示它的規則,其實可以這樣寫/\d(?=ab)/.exec( 'abc2abc' )


對於/^(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*])[\da-zA-Z~!@#$%^&*]{8,}$/

其實整個正則表示可以分爲三部分:

/^(?=.*\d)[\da-zA-Z~!@#$%^&*]{8,}$/   

/^(?=.*[a-zA-Z])[\da-zA-Z~!@#$%^&*]{8,}$/

/^(?=.*[~!@#$%^&*])[\da-zA-Z~!@#$%^&*]{8,}$/

待匹配字符串必須同時符合這三部分纔可以


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章