2010-11-09 72 views
1

在我一起工作的系統,我們通過在以下條件下拋出異常驗證密碼類:在JavaScript中驗證密碼;正則表達式

public Password(string password) 
    : base(password) 
{ 
    // Must contain digit, special character, or uppercase character 

    var charArray = password.ToCharArray(); 

    var hasDigit = charArray.Select(c => char.IsDigit(c)).Any(); 
    var hasSpecialCharacter = charArray.Select(c => char.IsSymbol(c)).Any(); 
    var hasUpperCase = charArray.Select(c => char.IsUpper(c)).Any(); 

    if (!hasDigit && !hasSpecialCharacter && !hasUpperCase) 
    { 
     throw new ArgumentOutOfRangeException 
      ("Must contain at least one digit, symbol, or upper-case letter."); 
    } 
} 

如果我打算寫hasDigit,hasSpecialCharater和hasUpperCase此相同的檢查中JavaScript,它會是什麼樣子?

JavaScript沒有這些相同的字符原型,所以我必須使用正則表達式,不是嗎?

+0

Char.IsSymbol()是否實施不重要。 (我只是使用RedGate反射器窺視了mscorlib.dll。)如果您希望您的JavaScript和C#實現精確匹配,則最好在客戶端和服務器上使用相同的正則表達式。 – dana 2010-11-09 21:42:52

回答

1

的三個條件可以與結合:

if (/\d|\W|[A-Z]/.test(theString)) { 
... 

其中除了0

  • \d → 1數字(0-9),
  • \W → 1非文字字符(任何-9,az,AZ和_)這比C#的字符更匹配IsSymbol,萬一密碼支持ASCII以外的字符,
  • [A-Z] → 1大寫字母

但不匹配\d|\W|[A-Z]是唯一的字符az,我們不妨簡單地寫

if (/[^a-z]/.test(theString)) { 
+0

這與OP要求的不同。你正在檢查密碼是否有數字,大寫字母和特殊字符。他想檢查它是否至少有三個之一。 – MartinodF 2010-11-09 21:41:16

+0

@MartinodF:固定。 – kennytm 2010-11-09 21:44:45

1

hasDigit:

/\d/.test(password); 

hasUpperCase:

/[A-Z]/.test(password); 

hasSpecialCharacter:

/[^a-zA-Z0-9]/.test(password); 

編輯.test.match

好得多個
0

你應該能夠結合所有的測試成一個JS正則表達式:

if (!passwordString.match(/[^a-z ]/)) { 
    alert('Invalid password.'); 
    return false; 
}