2017-01-04 86 views
1

我試圖強制用戶輸入具有確切數量的caracts的密碼。 密碼必須如下: 總共8個字段: 1(正好)大寫, 3(正好)數字 和lowercase(在這種情況下爲4)。使用RegExp限制輸入數據

正則表達式我有:(?=.*[a-z])(?=.*[A-Z]{1})(?=.*[0-9]{3})

問題是,我們可以把3個以上麻木和更然後1個UPER和大於8 caract ..

實例:

  • 5p23qPsb - > OK
  • I9Opdi90 - > NOT OK
  • h7y1Rdw6 - >確定
  • IUD8954r - >不OK

想法還是一些幫助? 謝謝(我是法語所以對不起我的英語..)

+1

我會在你的腳本「手動」分析密碼替換正則表達式。例如:統計大寫字母,計數數字等(我不會將這個例子作爲答案發布,因爲您要求在標題中用正則表達式顯式解決問題。) – senden9

+0

'[0-9] {3}'表示三一行中的數字不總是三位數。 – revo

+0

這是一個很好的解決方案,謝謝 –

回答

0

你絕對是在這條正確的軌道上。您正在堆疊預覽,但預覽實際上並不是匹配的任何內容。他們只是檢查以確保它可以完成比賽。所以你需要添加一些像.+這樣的東西來實際匹配。這是你如何驗證你的字符串的工作。

讓我們從整個字符串開始。我們希望它是正好8個字符,所以我們可以做這樣的事情:

^(?=.{8}$) 

然後,我們想要的是一個大寫字母,所以我們可以做一個前瞻這樣的:

(?=.*[A-Z]) 

下一頁,我們希望能夠要求恰好有一個數字,所以我們可以利用這一點:

(?=.*[0-9]) 

最後,我們希望能夠要求正好是4小寫字母,可能會或可能不會彼此相鄰。這裏有一個相匹配的前瞻:

(?=.*[a-z].*[a-z].*[a-z].*[a-z]) 

現在我們已經得到了所有的作品中,我們可以設置我們的實際表達式匹配任何字符,超過一次.+。先前的預測將確保它符合要求。拼湊一切融合在一起,我們最終得到這樣的表達式:

^(?=.{8}$)(?=.*[a-z].*[a-z].*[a-z].*[a-z])(?=.*[A-Z])(?=.*[0-9]).+ 

Here is a demo

+0

謝謝你提供的所有信息! 我爲未來的情況保留你的答案:) –

0
/(?=.*?[A-Z]{1})(?=.*?[a-z]{4})(?=.*?[0-9]{3})/.test("123Aacds");