2013-07-11 302 views
0

我正在研究使用jQuery密碼強度指示器,並發現一個看起來合適的。Javascript正則表達式字符匹配

它增加,如果檢測到特殊字符的密碼強度評分:

if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)){ score += 5 ;} 

但是我希望能夠指定其他特殊字符,因爲特殊字符這些名單在多處使用,我'd只想列出一次:

list = array(!,@,#,$,%,^,&,*,?,_,~,[,],{,},(,)); 
if (password.match(/(.*[list].*[list])/)){ score += 5 ;} 

這可能嗎?

+0

http://stackoverflow.com/questions/11596556/using-dropboxs-zxcvbn-password-strength-estimator/11596627#11596627 – sabithpocker

+0

看不到的jQuery的任何使用這裏。當然你可以在全球某個地方定義列表。使用list.join(「」)來獲取序列化的字符列表。 – Tommi

回答

3

您可以使用字符串:

var special = "[email protected]#$%^&*?_~[]{}()".split('').join('\\'); 
if (password.match(new RegExp("(.*[" + special + "].*[" + special + "])")))... 

(所以他們處理的加入,用反斜槓逃逸的特殊字符字面上由正則表達式引擎。)

0

你不需要通過,在正則表達式來分隔字符:

var list = "[\\[email protected]#\\$%\\^&\\*\\?_~]"; 
var your_regex = new RegExp(".*" + list + ".*" + list); 
if (your_regex.test(password)){ 
    score += 5; 
} 
+0

您還應該轉義有意義的符號,例如'?'...例如'/ [\?\!] /' – Tim

+0

你也不能像JS中的''list''這樣的字符串中嵌入變量,它們需要連接起來。對不起,我想我是那個人 – Tim

+0

@Tim,是的,那是我的臨時腦凍結,謝謝 – mishik

2

是的,如果你使用RegExp() constructor,你可以傳遞一個字符串作爲正則表達式。

var list = ['\\!', '\\@', '\\#', '\\%']; 
var reg = new RegExp('(.*['+ list.join(',') + '].*['+ list.join(',') +'])'); 
if (reg.test("MySuperPassword!#_123")) { 
    score += 5; 
} 
0

爲什麼你需要一個正則表達式?

var list = ['!','@','#','$','%','^','&','*','?','_','~','[',']','{','}','(',')'], 
    score = 0; 

for (var i=list.length;i--;) { 
    if (password.indexOf(list[i])) score++; 
} 

FIDDLE