2012-06-01 57 views
1

我有密碼驗證JavaScript中的正則表達式如下:正則表達式沒有驗證

^[!#\$%\(\)\*,\-\./:;=\[email protected]\[\\\]\^_`\{\|\}~a-zA-Z0-9]*$ 

    <script type="text/javascript"> 
     var regex = "^[!#\$%\(\)\*,\-\./:;=\[email protected]\[\\\]\^_`\{\|\}~a-zA-Z0-9]*$"; 
     var value = 'test'; 
     if (value.match(regex) == false) { 
      alert('password invalid'); 
     } 
    </script> 

正則表達式規則是:

  • 12-25個字符
  • 至少一個大寫字母
  • 至少有一個小寫字母
  • 至少有一個數字
  • !10特殊字符
  • 至少一個:#$%()*, - 。/:; = []^_`@ {|}〜

然而,正則表達式似乎不工作。它匹配任何字符。我該如何解決?

+1

首先,我沒有看到在該強制執行12-25個字符限制的正則表達式的任何地方。您似乎剛剛使用*表示'0或更多' - 您當前的正則表達式正好是: 開始 - 您的四個項目符號點(包括0)中的任意數量的字符 - 結束 – Ina

+0

將您的正則表達式分成3個正則表達式檢查所有規則。 – gaussblurinc

回答

1

使用積極向前的正則表達式可以在單個匹配調用中進行驗證。使用此正則表達式:

var regex = 
    /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!#$%()\*,/:;[email protected]\[\\\]\^_`{}|.-])^.{12,25}$/; 
var value = 'aaaAaaaaa?test2'; 
if (!value.match(regex)) 
    document.writeln('invalid'); 
else 
    document.writeln('valid'); 

See this code live in action

1

嘗試:

/^(?=(?:.*[a-z]){1})(?=(?:.*[A-Z]){1})(?=(?:.*\d){1})(?=(?:.*[!#$%()*,-./:;[email protected][]^_`{|}~ ]){1,}).{12,25}$/