2014-01-07 129 views
1

我想用我的asp.net項目中使用regularexpression驗證器的簡單RegEx替換我們的密碼驗證。密碼強度正則表達式

這裏是密碼限制:

  1. 密碼長度應爲至少6個字符的和最大15
  2. 它應具有至少一個字母(任何情況下)
  3. 它應具有至少一個數字
  4. 它應該至少有一個特殊字符。

我在正則表達式的n00b,這是問題在那裏我問勺子餵養的唯一類型;)

我想下面的正則表達式,但在少數情況下會失敗。

string re1="([a-z])"; // Any Single Word Character (Not Whitespace) 1 
string re2=".*?";  // Non-greedy match on filler 
string re3=".";   // Uninteresting: c 
string re4=".*?";  // Non-greedy match on filler 
string re5=".";   // Uninteresting: c 
string re6=".*?";  // Non-greedy match on filler 
string re7="(.)";  // Any Single Character 1 
string re8="(\\d)";  // Any Single Digit 1 

Regex r = new Regex(re1+re2+re3+re4+re5+re6+re7+re8,RegexOptions.IgnoreCase|RegexOptions.Singleline); 
Match m = r.Match(txt) 
+0

這裏你去:http://goo.gl/cWa5m5 –

+0

重複許多類似的問題...仍然沒有讓它更好的想法 - 很容易記住密碼比匹配一些嚴格規則的要好。即「aaaa1!」相比「Nexus不應該限制我的密碼」 - 我敢打賭大多數工具都會很快選擇第一個,爲什麼後面的一個不是那麼簡單...... –

+0

https://xkcd.com/936/ –

回答

0

我對此也很陌生,我發現了一篇關於驗證應該工作相同的文件名的文章。

if(preg_match('/^[a-z0-9-_]+$/',$file_name)) 
{ 
    echo 'good filename'; 
} 
else 
{ 
    echo ' The file name can only contain "a-z", "0-9", "_", and "-"'; 
} 

這將檢查它是否包含某些字符,您可以使用它檢測密碼中的數字和字母。另外,如果我是你,我還對常見的密碼,如"password""password123"

2

列表比較密碼使用這樣的模式:

^(?=.*[a-z])(?=.*[0-9])(?=.*[...]).{6,15}$ 

在哪裏可以更換[...]與任何字符你想接受爲'特殊字符'。

爲了打破這種下來一點:

  • 開始(^)和結束($)錨確保有在輸入無前導或尾隨字符。這是確保實施最大長度所必需的。
  • .{6,15}位與任何字符的6到15匹配。
  • (?=...)是一個超前看。它確保匹配的位置後面跟隨任何出現的圖案。

    • .*[a-z]表示任意數量的字符後跟一個拉丁字母。
    • 類似地,.*[0-9]匹配任意數量的字符後跟一個十進制數字,並且.*[...]匹配任意數量的字符後跟一個「特殊字符」。
  • 總而言之,(?=.*[a-z])(?=.*[0-9])(?=.*[...])的鏈條意味着這三個模式必須以任意順序出現在下列字符串中。