2013-08-30 86 views
-1

我要驗證密碼,以便符合這些規則複雜的密碼驗證的單正則表達式

A)的密碼必須包含以下4類3個字符:

  1. 英文大寫字母A ,b,C,... Z
  2. 英文小寫字母A,b,C,... Z
  3. 西化阿拉伯數字0,1,2,... 9
  4. 非字母數字(「特殊字符「) 例如,標點符號。 {} ,. <>;:?!'/ |`〜!@#$%^ * &()_- + =空間

B)中的密碼必須least8字符長;

這可以在一個正則表達式中完成。那個正則表達式會是什麼?

+3

不好的用戶..... – assylias

+0

http://stackoverflow.com/search?q=regex+password+validate – CBroe

+0

你用的語言/口味是什麼?你有什麼嘗試?簡短的答案是「是的,這是可能的」,但爲什麼?無論如何,你應該散列它。 [這也是一個有趣的閱讀: - ]](http://security.stackexchange.com/a/33471) – HamZa

回答

5

此任務不適合使用正則表達式。

可以在一個正則表達式中完成,但它會是如此複雜和複雜,你最好以其他方式做檢查。

僅僅因爲可以用正則表達式來完成並不意味着這是個好主意。

0

我認爲使用複雜的正則表達式不是一種應該不惜一切代價使用的方式。在這種情況下,使用四個布爾類型的簡單方法將更易於編寫,更易於閱讀並且可能更快。

-1

我想你已經用單個正則表達式實現了非常接近的結果。下面是一個例子:

^((?=。* [!@#$%&,()_ =/\。\ - \ * \ + \?])[A-Za-z0-9! ?@#$%&,()_ =/\ \ - \ * \ + \] {8,20})$

這表示:

  • 至少1個控制字符
  • 可以包含字母數字字符
  • 長度在8到20個字符之間
+0

你可能是指「標點符號等」,當你說「控制」。從技術上講,控制字符是ASCII碼0-31。 – tripleee

0

你可以檢查它是:

  • 不是純粹的數字和字母數字(這是稍微更積極的比你的情況說了);
  • 不是純粹的小寫字母和特殊字符

一個正則表達式來檢查,這將是像

(?![A-Za-z0-9]+$|[a-z{},.<>;:'?/|`[email protected]#$%^&*()_-+= -]+$).{8,} 

我故意忽略了你確切的規格。特別是,我不希望允許Pass1234,我認爲設置最大長度並不合理,並且我沒有限制允許的字符集(即有最低要求,但您可以去野外並使用控制字符或重音字符如果你喜歡)。如果您不同意,這些事情很容易解決。

要嚴格執行您的規範,您可以檢查密碼不是純粹由任何兩組組成的;所以不是所有的大小寫,也不是所有的大寫和小寫,也不是所有的大寫和數字,也不是所有的大寫和數字,也不是所有的數字和特殊的,並不是所有的小寫和特殊的,並不是所有的大寫和特殊的,但再次,這是有點乏味和恕我直言適得其反。

你不是在說你正在使用哪種正則表達式。我認爲你可以使用Perl負面預測(?!...)。如果僅限於傳統的BRE或ERE語法,這將非常困難。