2015-01-14 80 views
8

我需要一個密碼字段的正則表達式。正則表達式的密碼:「至少1個字母,1個數字,1個特殊字符,不應該以特殊字符開頭」

的要求是:

  1. 密碼必須長度爲8到20個字符

  2. 必須包含至少一個字母一個號碼和一個特殊的字符從[email protected]#$%^&*()_+

  3. 不應該以特殊字符

我已經試過

^(?=.*[a-zA-Z])(?=.*\d)(?=.*[[email protected]#$%^&*()_+])[A-Za-z\[email protected]#$%^&*()_+]{8,20} 

它的工作原理,但你如何限制從開始的口令特殊字符開始?另外,如果你有一個比上面提到的更有效的正則表達式,請建議。

謝謝

+0

我不會做,與正則表達式(不認爲它甚至有可能)。我會通過字符搜索字符串char,並有我的計數器。 – Ch33f

回答

10

它的簡單,只是在開始時

^(?=.*[a-zA-Z])(?=.*\d)(?=.*[[email protected]#$%^&*()_+])[A-Za-z\d][A-Za-z\[email protected]#$%^&*()_+]{7,19}$ 
  • [A-Za-z\d]確保第一個字符是字母或數字增加一個字符類。

  • [A-Za-z\[email protected]#$%^&*()_+]{7,19}將匹配最小7個最大19個字符。這是必需的,因爲他預測字符類將消耗單個字符,從而使得字符串中的字符總數爲最小值8和最大值20.

  • $錨定字符串末尾的正則表達式。確保有沒有按照我們的有效的密碼

Regex Demo

var pattern = new RegExp(/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[[email protected]#$%^&*()_+])[A-Za-z\d][A-Za-z\[email protected]#$%^&*()_+]{7,19}$/); 

console.log(pattern.test("[email protected]#[email protected]#")); 
=> false 

console.log(pattern.test("[email protected]#")); 
=> true 

console.log(pattern.test("12as#")); 
=> false 
+0

完美的作品。謝謝! – adiga

+0

@adiga歡迎:) – nu11p01n73R

+0

@adiga我看到了你的編輯。它可以在前面用'\ w'代替,但是由於'\ w' =>'[A-Za-z0-9_]在第一個字符類「[A-Za-z \ d] '。注意'_'是一個特殊字符,如果使用'_asdf234 $%',可能會給你帶來麻煩。我認爲這不能被視爲有效。希望它對你好:) – nu11p01n73R

相關問題