2012-11-30 83 views
3

我似乎無法將自己的頭圍繞在這一張上,並認爲我會在此尋求一些幫助!檢查包含3個連續字母和2位數字的任意順序的字符串

基本上我在驗證密碼字段和要求如下:
- 必須包含連續的3個字母
- 必須至少包含2位
- 可以以任意順序(如1abc342,abc24g3,11abcsjf )

這裏是我到目前爲止,但我相信它需要一些調整:
/[AZ] {3} [0-9] [0-9] /我

+1

「連續」是指三個字母一個接一個,或者像「MNO」這樣的字面順序? –

+0

他們不需要連續,只需連續三個。謝謝 – Arkayz

回答

1

你或許應該這樣做在兩個單獨的正則表達式中:一個用於測試三個連續的字母a nd一個測試至少兩位數:

/[a-z]{3}/i 
/\d.*d/ 

確保滿足這兩個條件。你可以用lookahead將它合併成一個正則表達式,但我認爲兩個正則表達式是更清晰的代碼和更好的解決方案。

但是,如果我可以對此事發表一些意見:除非你沒有控制權(客戶指定這個),否則我強烈建議不要這樣設置密碼限制。他們實際上使你的密碼系統遠遠不夠安全,不是更安全。一些閱讀上的原因:

http://jimpravetz.com/blog/2011/06/cheap-gpus-are-rendering-strong-passwords-use/

http://jimpravetz.com/blog/2012/02/stupid-password-rules/

+0

謝謝!這對我來說是最有意義的,因爲我還沒有關於lookahead的知識。此外,這是限制條件的一部分,我完全同意你的意見。我向你保證它只用於教育目的:) – Arkayz

+0

是的,也是@ m.buettner說的=)。 –

+0

非常感謝你們!我一直在stackoverflow上爬行了很長一段時間,但從來沒有發現需要真正自己問一個問題:)最後終於成爲成員了。你有我的複選標記! – Arkayz

2

你所描述的正則表達式可以寫成像這樣:

/(?=.*?[a-z]{3})(?=.*?\d.*?\d)/ 

三個字母的第一個超前掃描搜索成一排,在任何位置。第二個lookahead在任何位置查找數字,然後在前面進一步數字。

+0

爲了達到最優化的目的,你應該用'^'把它錨定到字符串的開頭,我想。 –

+0

我對正則表達式的知識有限,而且我還沒有學會如何使用lookahead。但我會回來看看在未來某個時候。謝謝 – Arkayz

+0

@Arkayz沒有這樣的驗證可能會在單個正則表達式中變得非常難看。 [http://www.regular-expressions.info/lookaround.html]當然,將驗證分成像Ben這樣的兩個步驟可能是最具可讀性和可維護性的解決方案。 –

相關問題