はここ(肯定先読みを使用して)私はそれを行うだろう方法は次のとおりです。
(?=.{9,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\p{Punct}).*
全例とテスト:
// Regexp Description
Pattern p = Pattern.compile("(?=.{9,})" + // "" followed by 9+ symbols
"(?=.*[a-z])" + // --- ' ' --- at least 1 lower
"(?=.*[A-Z])" + // --- ' ' --- at least 1 upper
"(?=.*[0-9])" + // --- ' ' --- at least 1 digit
"(?=.*\\p{Punct})"+ // --- ' ' --- at least 1 symbol
".*"); // the actual characters
String[] tests = {
"aB99", // too short
"abcdefghijk", // missing A
"abcdefGHIJK", // missing 5
"12345678910", // missing a
"abcDEF12345", // missing punct
"abcDEF-2345" // works!
};
for (String s : tests) {
boolean matches = p.matcher(s).matches();
System.out.printf("%-12s: %b%n", s, matches);
}
出力:
aB99 : false
abcdefghijk : false
abcdefGHIJK : false
12345678910 : false
abcDEF12345 : false
abcDEF-2345 : true
最終発言:このアプローチの問題は、それは非常にユーザーフレンドリーではないということです。 「パスワードに数字記号がありません」などのユーザーに分かりやすい返答をする場合は、再度作業を行う必要があります(どの要件が失敗したかを把握するため)。
正規表現を学習すると何が問題になりますか?あなたが何かをやっている/やっていることを避けようとしているならば、あなたは間違ったサイトにいます。 –
regexの良いリファレンスはhttp://www.vogella.de/articles/JavaRegularExpressions/article.htmlです。あなたがすでに試したreg exを投稿してください –
可能な複製http://stackoverflow.com/questions/3387785/password-validation-regular-expression – cmbuckley