2010-09-09 50 views
3

任何人都可以幫我寫下以下描述的正則表達式嗎?要驗證密碼的JavaScript

密碼包含從至少三個以下五類的字符:

  • 英文大寫字符(A - Z)
  • 英文小寫字符(A - Z)
  • 10個基本數字( !0 - 9)
  • 非字母數字(例如:,$#或%)
  • Unicode字符

密碼的最小長度是6.

+5

爲什麼downvote? OP不希望創建基於Javascript的登錄,而是在用戶指定密碼時進行簡單驗證。 – 2010-09-09 07:34:32

+1

關於僞強密碼的一些舊評論:http://www.codinghorror.com/blog/2005/07/passwords-vs-pass-phrases.html – Douglas 2010-09-09 08:24:15

+0

對於正則表達式來說,這不是一個簡單的任務。正如Sachin在他的anser中提出的那樣,編寫你自己的字符串解析例程將會更容易,並且如果你的標準匹配,它會被計數。 – splash 2010-09-09 08:33:10

回答

3

更好的處理方法是分割每個條件併爲每個條件設置一個正則表達式。然後統計輸入的密碼有多少已滿足。通過這種方式,您甚至可以告訴用戶密碼是否平均,符合標準或非常強大的密碼。

if (password.length < 6) { 
    alert("password needs to be atleast 6 characters long"); 
} 

var count = 0; 
//UpperCase 
if(/[A-Z]/.test(password)) { 
    count += 1; 
} 
//Lowercase 
if(/[a-z]/.test(password)) { 
    count += 1; 
} 
//Numbers 
if(/\d/.test(password)) { 
    count += 1; 
} 
//Non alphas(special chars) 
if(/\W/.test(password)) { 
    count += 1; 
} 
if (count < 3) { 
    alert("password does not match atleast 3 criterias"); 
} 

不知道如何使用正則表達式匹配unicode字符。休息所有條件都在上面提供。

+1

這是一條評論,而不是答案。 (完全同意,順便說一句) – 2010-09-09 07:36:02

+0

更新了答案 – 2010-09-09 09:31:54

+0

由於薩欽,它工作正常 – Abhimanyu 2010-09-09 09:42:22

1

[A-Za-z!$#%\d\u0100]{6}比賽aS1%eĀ

\u0100是爲Â。你可以插入你需要的其他Unicode代碼。你可以找到它們here

編輯:至少6個字符正確的正則表達式是[A-Za-z!$#%\d\u0100]{6,}。編輯2:要包含一系列的Unicode字符(讓它是拉丁字母擴展-B),正則表達式應該看起來像^[A-Za-z!$#%\d\u0100-\u017f]{6,}$。您可以找到Unicode代碼範圍here

編輯3:我開發了一個小函數來檢查給定的密碼是否符合標準。您需要在函數中定義unicode範圍。

function isValidPassword(password) {  
    var unicodeRange = "\\u0100-\\u0105"; 
    var criteria = ["A-Z","a-z","\\d","!$#%",unicodeRange]; 

    // check whether it doesn't include other characters 
    var re = new RegExp("^[" + criteria.join("") +"]{6,}$"); 
    if(!re.test(password)) return false; 

    var minSatisfiedCondition = 3; 
    var satisfiedCount = 0; 
    for(var i=0; i < criteria.length; i++) { 
     re = new RegExp("[" + criteria[i] + "]"); 
     if(re.test(password)) ++satisfiedCount; 

    } 
    return (satisfiedCount >= minSatisfiedCondition); 
}​ 

有一個工作樣品here

+0

有了這個正則表達式,你不知道是否至少有三個標準的匹配。 – splash 2010-09-09 08:38:19

+0

@splash:是的,你說得對。我編輯了我的答案並添加了驗證功能。 – Zafer 2010-09-09 09:12:54