find()
не проверяет, может ли целая строка соответствовать регулярному выражению, matches()
. find
просто пытается найти любую подстроку, которая может быть сопоставлена регулярным выражением. Также (?=.{8,12})
проверьте, есть ли место после 8-12 символов. Так что либо добавить anchors^
$
в своем регулярном выражении, представляющий начало и конец строки, как
Pattern.compile("^(?=.*[A-Z])"
+ "(?=.*[a-z])"
+ "(?=.*[0-9])"
+ "(?=.{8,12}$)").matcher("passworD12345678").find();
или использовать matches()
с этим регулярным выражением
Pattern.compile("(?=.*[A-Z])"
+ "(?=.*[a-z])"
+ "(?=.*[0-9])"
+ ".{8,12}").matcher("passworD12345678").matches();
// ^^^^^^^ we can't use look-ahead because we need some part of regex
// which will let regex consume all characters from string
'. {8,12}' соответствует 8 до 12 символов в любом месте в строке. – mustaccio
@mustaccio Какие изменения необходимы для проверки строки на основе длины и других требований (содержит верхний регистр и цифру)? – Glide
@Pshemo Вы уверены? Он компилируется для меня. – Glide