我似乎無法將自己的頭圍繞在這一張上,並認爲我會在此尋求一些幫助!檢查包含3個連續字母和2位數字的任意順序的字符串
基本上我在驗證密碼字段和要求如下:
- 必須包含連續的3個字母
- 必須至少包含2位
- 可以以任意順序(如1abc342,abc24g3,11abcsjf )
這裏是我到目前爲止,但我相信它需要一些調整:
/[AZ] {3} [0-9] [0-9] /我
我似乎無法將自己的頭圍繞在這一張上,並認爲我會在此尋求一些幫助!檢查包含3個連續字母和2位數字的任意順序的字符串
基本上我在驗證密碼字段和要求如下:
- 必須包含連續的3個字母
- 必須至少包含2位
- 可以以任意順序(如1abc342,abc24g3,11abcsjf )
這裏是我到目前爲止,但我相信它需要一些調整:
/[AZ] {3} [0-9] [0-9] /我
你或許應該這樣做在兩個單獨的正則表達式中:一個用於測試三個連續的字母a nd一個測試至少兩位數:
/[a-z]{3}/i
/\d.*d/
確保滿足這兩個條件。你可以用lookahead將它合併成一個正則表達式,但我認爲兩個正則表達式是更清晰的代碼和更好的解決方案。
但是,如果我可以對此事發表一些意見:除非你沒有控制權(客戶指定這個),否則我強烈建議不要這樣設置密碼限制。他們實際上使你的密碼系統遠遠不夠安全,不是更安全。一些閱讀上的原因:
http://jimpravetz.com/blog/2011/06/cheap-gpus-are-rendering-strong-passwords-use/
你所描述的正則表達式可以寫成像這樣:
/(?=.*?[a-z]{3})(?=.*?\d.*?\d)/
三個字母的第一個超前掃描搜索成一排,在任何位置。第二個lookahead在任何位置查找數字,然後在前面進一步數字。
爲了達到最優化的目的,你應該用'^'把它錨定到字符串的開頭,我想。 –
我對正則表達式的知識有限,而且我還沒有學會如何使用lookahead。但我會回來看看在未來某個時候。謝謝 – Arkayz
@Arkayz沒有這樣的驗證可能會在單個正則表達式中變得非常難看。 [http://www.regular-expressions.info/lookaround.html]當然,將驗證分成像Ben這樣的兩個步驟可能是最具可讀性和可維護性的解決方案。 –
「連續」是指三個字母一個接一個,或者像「MNO」這樣的字面順序? –
他們不需要連續,只需連續三個。謝謝 – Arkayz