2017-04-27 20 views
1

我想通過使用正則表達式在C++中驗證使用隨機密碼生成器函數生成的密碼。正則表達式範圍不能用於驗證隨機生成的密碼

密碼的規則是: 密碼必須是總共8個字母。密碼可以是4個大寫字母和4個數字或6個大寫字母和2個數字。

有效實例:

  • ABCD1234
  • PQRSTU88

我用這表達: /^(?=.{8}$)([AZ] {4,6})([0-9] {2,4})\ w +/gm

and this website測試表達式: http://regexr.com/3frd4

它工作時的範圍內保持爲{1,4}但如果我改變至{2,4}第二示例密碼失敗。

點擊細節按鈕顯示,對於第一示例密碼:ABCD1234,

捕獲組#1捕捉ABCD &捕獲組#2僅捕獲123(未1234?)。

對於第二個例子的密碼:PQRSTU88,

捕獲組#1捕捉PQRSTU &捕獲組#2捕捉只有8(未88?)。

根據我的理解,{2,4}指定至少2個數字至多4個數字。那麼爲什麼我的正則表達式在第二個例子中不適用於該範圍。

+1

這是因爲'\ w +'。你爲什麼使用它? –

+0

@WiktorStribiżew我是正式表達的新手,沒有完全理解\ w的含義。刪除它後,它是正確的。如果您已將此評論發佈爲答案,我會將其標記爲已接受的答案。 – Ghos3t

+0

是的,我發佈了一個答案。你接受了,謝謝。我也提出了這個問題。 :)乾杯。 –

回答

2

您的第二個字符串未通過驗證,因爲它僅包含5個字母和2個數字,但您的正則表達式至少需要1個字以後的字符。

密碼必須是8個字母的總長度。密碼可以是4個大寫字母和4個數字或6個大寫字母和2個數字。

您需要使用

^(?:[A-Z]{4}[0-9]{4}|[A-Z]{6}[0-9]{2})$ 

regex demo

詳細

  • ^ - 串
  • 開始
  • (?: - 交替組開始
    • [A-Z]{4} - 4 ASCII大寫字母
    • [0-9]{4} - 4個位數(8一切的一切)
  • | - 或
    • [A-Z]{6} - 6大寫ASCII字母
    • [0-9]{2} - 2個位數(8總而言之)
  • ) - 交替組的端
  • $ - 端字符串。