2014-03-05 114 views
1

我在javascript上使用正則表達式的密碼驗證有問題。的標準是:使用正則表達式的Javascript密碼驗證

  1. 具有至少一個或更多個字母(它可以是上殼體或下殼體)
  2. 具有至少一個或多個數
  3. 字符長度最小3和最大30

我希望有人能幫助我解決這個問題:)

var ch_pass = /^([0-9]+).([a-zA-Z]+).({3,30})$/;

+0

您可以通過檢查該值的'.length'輕鬆檢查#3。對於#1和#2,只需使用兩個正則表達式來檢查每個值是否包含字母和數字字符。例如:'var value =「您的輸入」,alpha =/[A-Za-z] /,numeric =/[0-9] /; if(value.length <3 || value.length> 30 ||!alpha.test(value)||!numeric.test(value)){/ * INVALID * /}'。在我看來 – Ian

回答

2

您可以使用前瞻這樣的:

var ch_pass = /^(?=.*?[0-9])(?=.*?[a-zA-Z]).{3,30}$/; 
+0

感謝sir 你的代碼解決了我的問題:) – user3385131

+1

很高興知道,你可以通過點擊答案左上角的刻度標記來接受答案。 – anubhava

+0

'。*?'==>不是'。*'已經夠了嗎? – donfuxx

2

我不會建議嘗試做這整個檢查在一個單一的正則表達式,因爲它只是在複雜的。單獨做每個條件。

  1. 具有至少一個字母:

    var has_letters = (/[a-zA-Z]/).test(password); 
    
  2. 具有至少一個數:

    var has_numbers = (/[0-9]/).test(password); 
    
  3. 具有3和30之間的字符(含):

    var has_length = 3 <= password.length && password.length <= 30; 
    

這都可以纏繞成函數:

function is_password_valid(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; 
} 

或者,如果你喜歡的東西更密:

function is_password_valid(password) { 
    return ((/[a-zA-Z]/).test(password) 
     && (/[0-9]/).test(password) 
     && password.length >= 3 
     && password.length <= 30); 
} 
+0

這並不重要,但'regex.test'使用更有意義,而不是'.match()!= null '。 #3,你遺漏了「最多30個」部分 – Ian

+1

@Ian謝謝你,我不知道'.test()'。 – cpburnz

+0

對不起,'test'是一個正則表達式對象的方法。你會使用var alpha =/[a-zA-Z] /;'然後是'alpha.test(password)' - 如果它匹配或者不匹配,它會返回一個布爾值 – Ian