2013-08-23 75 views
0

我有以下的javascript代碼爲我的密碼強度指示特殊字符:!不要讓除允許的字符JavaScript的正則表達式

if (password.match(/([!,@,#,$,%])/) 
{ 
    strength += 2 
} 

所以這做的是什麼,如果密碼中包含這些允許的字符中的一個(, @,#,$,%),它會爲指標的強度增加一個值。

我的問題是我也想減少密碼指示燈的強度,一旦其他特殊字符出現在密碼上。例如:^,`,〜,<,>

爲了消除混淆,基本上我不想要除上面出現的(!,@,#,$,%)以外的任何其他特殊字符。所以我做了硬編碼,寫了所有我不想要的特殊字符。

我嘗試使用這樣的:

if (password.match(/([^,`,~,<,>])/) 
{ 
    strength -= 2 
} 

但是我也不想有"',但當時如果我包括他們對我的if條件,就會把我一個錯誤說語法錯誤正則表達式。我明白這一點,因爲我知道"代表一個必須關閉的字符串。我能做點什麼嗎?提前致謝!

+2

請教你:[正則表達式(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Special_characters_in_regular_expressions) – Teemu

+0

只是提醒你,正則表達式的'[]'中的字符不是逗號分隔的,它也不需要任何分隔符。 – Diryboy

+0

不要在brakets內使用逗號'[!@#$%]'和'[^ \'〜<>]' – jcubic

回答

2

您不需要用逗號分隔您的個別字符,也不需要將括號中的唯一字詞換行。

這應該工作:

/[`^~<>,"']/ 

注意克拉(^是不是在前面,這有特殊的意義,當放置在[]塊的開始)

而且你應該使用test(),因爲你只想要一個布爾型的if-包含結果

/[`^~<>,"']/.test(password) 
+0

但是如果我在內部包含'/',它會給我一個錯誤,例如:'(/ [〜^()/] /)' – Gerald

+0

然後通過用反斜槓加前綴來避開它。例如'/ [〜^()\ /] /'。不要研究@ Teemu的鏈接 – Hashbrown

1

包含這些特殊的c不帶逗號的方括號中的字符,看它是否有效。

你可以嘗試一下在這裏 - http://jsfiddle.net/BCn7h/

如:

if (password.match(/["',]/) 
{ 
    strength -= 2 
} 
2

你想要做什麼是逃避每個"',並,使用\的。您正在尋找的正則表達式是:

/([\^\`\~\<\,\>\"\'])/ 

我實際產生,使用JSVerbalExpressions庫。我強烈建議你檢查一下!爲了向你展示它是如何真棒,產生上述正則表達式的代碼是:

var tester = VerEx() 
      .anyOf("^,`'\"~<>"); 

console.log(tester); // /([\^\`\~\<\,\>\"\'])/ 
+0

沒有必要轉義字符類中的任何字符,除了第一個位置的'^'和正則表達式'/'的分隔符。當不在第一個或最後一個位置時,最後會出現'-'。 – Toto

相關問題