2014-09-28 43 views
-2
if(password.matches("(?=.*[0-9].*[0-9])(\\w{8,})")) 
     System.out.println("Valid Password"); 
    else 
     System.out.println("Invalid Password"); 

我正在檢查密碼,以確保它至少有8個字符的長度,可以是字母或數字,它必須至少有2位數字。這似乎對我有用,但我只是想確認我是這麼做的。此外,我一直在努力研究並弄清楚每件作品究竟在做什麼。以下是我認爲每件作品都要做的事情,但是如果我錯了,請您解釋一下特定部分實際在做什麼。謝謝Java正則表達式 - 這些部分各有什麼作用?

?=告訴程序要記住我找到的數字[0-9]是否被找到?

。*對任意數量的[0-9]表示?

[0-9]指定0-9中的任意數字。

。* [0-9]然後正則表達式查找0-9的另一個數字?

(\\ w {8,})會查找任何字母(大寫或小寫)和數字,最小長度爲8個字符?

+1

看看解釋面板:http://regex101.com/r/dG8zD1/1 – August 2014-09-28 15:27:42

+0

該網站真棒!感謝您的鏈接。 – 2014-09-28 15:29:00

回答

0

該正則表達式有兩個主要部分:

  1. (?=.*[0-9].*[0-9])
  2. (\\w{8,})

第1部分是積極向前看,它的形式(?=pattern)。 「環顧四周」(積極/消極的背後/前進)斷言,而不消耗(或捕捉),相鄰的輸入匹配某種模式。在這種情況下,它斷言當前點之後的輸入包含(至少)2位數(.*表示0-n個字符,[0-9]表示任何數字字符)。順便說一下,它可以更簡潔地表示爲(?=(.*[0-9]){2}

第2部分意思是「至少8個單詞字符」 - 單詞字符是任何字母,任何數字或下劃線。圍繞它的括號(不必要地)捕獲8+單詞字符作爲組1