簡體   English   中英

使用 Java 正則表達式的密碼驗證失敗

[英]Password validation using Java regex fails

我的要求包括驗證密碼輸入是否僅包含以下字符之一。 ?@#$%^&*()_+=?~

為了實現這一點,我寫了以下內容:

StringBuilder builder = new StringBuilder("(?=.*[a-z])");
builder.append("(?=.{1}[!@#$%^&*()_+=?~])");

Pattern pattern = Pattern.compile(builder.toString());
Matcher matcher = pattern.matcher(input);

if(matcher.matches){
    return True;
}

但是,當我在單元測試中通過有效輸入時,這總是失敗。 我是正則表達式的新手。

您可以將此正則表達式與 2 個前瞻斷言一起使用:

^(?=[^a-z]*[a-z])(?=[^!@#$%^&*()_+=?~]*[!@#$%^&*()_+=?~][^!@#$%^&*()_+=?~]*$).{12,}$

正則表達式演示

請注意,在.matches()方法中,開始和結束錨點自動隱含在給定的正則表達式中。

正則表達式詳細信息:

  • ^ : 開始
  • (?=[^az]*[az]) :正向前瞻以確保我們至少有一個小寫字母
  • (?=[^?@#$%^&*()_+=?~]*[?@#$%^&*()_+=?~][^!@#$%^&*()_+=?~]*$) :積極的前瞻,以確保我們只有一個給定的特殊字符。
  • .{12,} :匹配至少 12 個字符
  • $ : 結束

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM