2016-02-22 74 views
0

我想使用正則表達式或JavaScript來實現密碼驗證。 不幸的是我是一個總的新手到正則表達式:/使用正則表達式的jQuery/Javascript密碼驗證

的標準是:

  • 最小長度:8個字符(可以是大寫或小寫)
  • 必須包含1個特殊字符(像!?$%@ &)
  • 必須至少包含一個數字

我發現下面的代碼片段,但至少它恰恰缺少檢查的特殊類型+編號racter ..

function validPassword(password) { 
    var has_letters = (/[a-zA-Z]/).test(password); 
    var has_numbers = (/[0-9]/).test(password); 
    var has_length = 3 <= password.length && password.length <= 30; 
    return has_letters && has_numbers && has_length; 
} 

感謝

+2

https://xkcd.com/936/ –

回答

1

添加一個額外的檢查:

function validPassword(password) { 
    var has_letters = /[a-zA-Z]/.test(password); 
    var has_numbers = /\d/.test(password); 
    var has_special = /[!?$%&@]/.test(password); 
    var has_length = (password.length >=8 && password.length <= 30); 

    return has_letters && has_numbers && has_special && has_length; 
} 

但是,如果你想有一個單一的正則表達式來做到這一切,然後使用向前看符號:

var re = /^(?=.*\d)(?=.*[!?$%&@])(?=.*?[a-zA-Z]).{8,30}$/; 

var isValid = re.test(password); 
+1

我想知道什麼是錯在這裏? – anubhava

+0

我想它不檢查長度= 1特殊字符和數字(?) – Fuxi

+0

我相信你想至少有一個特殊字符?還是你想要一個確切的特殊字符? – anubhava

1

另一種方式是

function validPassword(password) { 

    return password.length > 8 
     && password.match(/[\d]/) 
     && password.split(/[\W]/).length == 2 ; 
} 

password.length > 8檢查長度應該是最小的8

password.match(/[\d]/)檢查其是否具有至少一個數字

password.split(/[\W]/).length == 2檢查其是否具有一個特殊字符

+0

任何讓你水平滾動的行看起來都太長了;) –

+0

@NiettheDarkAbsol希望它不會太長:) – gurvinder372

1

您可以使用下面的正則表達式來驗證您的密碼:

var regex = "^(?=.*[A-Za-z])(?=.*\d)(?=.*[[email protected]$!%*#?&])[A-Za-z\[email protected]$!%*#?&]{8,}$"; 

這將檢查最少8個字符的驗證至少1個字母,1個數字和1個特殊字符。

1

你的正則表達式應該是這樣的:

(?=^.{8,}$)(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^A-Za-z0-9]).* 

下面是詳細:

(?=^.{6,}$) - String is > 5 chars 
(?=.*[0-9]) - Contains a digit 
(?=.*[A-Z]) - Contains an uppercase letter 
(?=.*[a-z]) - Contains a lowercase letter 
(?=.*[^A-Za-z0-9]) - A character not being alphanumeric.