[英]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.