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,}$/
待匹配字符串必須同時符合這三部分纔可以