Нашел в инете готовые рег выражения для проверки паролей. Пробовал проверять с помощью Pattern + Matcher, пробовал с помощью String.matches.
Постоянно проскакивают пароли без цифр, ну и + валидатор говорит, что и на буквы проверка не работает. Также ругается, что мой код кидает исключения. Я понимаю что в целом задачу можно сделать по другому, или например проверить не строку а массив посимвольно, но хочу довести до ума именно этот способ.
package com.javarush.task.task32.task3204;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Генератор паролей
*/
public class Solution {
public static void main(String[] args) throws IOException {
ByteArrayOutputStream password = getPassword();
System.out.println(password.toString());
}
public static ByteArrayOutputStream getPassword() throws IOException {
byte[] password = new byte[8];
int min = 48;
int max = 122;
// String regex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])$";
Random r = new Random();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
for (int i = 0; i < password.length; i++) {
byte bytes = (byte) (min + r.nextInt(max - min + 1));
if (!((bytes > 57 && bytes < 65) || (bytes > 90 && bytes < 97))){
password [i] = bytes;
} else i --;
if (i == password.length - 1){
// Pattern pattern = Pattern.compile(regex);
String check = new String(password, StandardCharsets.UTF_8);
// Matcher matcher = pattern.matcher(check);
if (check.matches("(?=.*[0-9])") && check.matches ("(?=.*[a-z])")
&& check.matches("(?=.*[A-Z])")){
i = 0;
}
}
}
byteArrayOutputStream.write(password);
return byteArrayOutputStream;
}
}