Ваше регулярное выражение в основном в порядке.
Вы не предоставили тип регулярных выражений, который вы используете, так что если это не Java или другой язык, который не поддерживает точные строки, вы, возможно, потребуется изменить \\d
в \d
, или что часть регулярного выражения будет попытайтесь сопоставить буквальную обратную косую черту, за которой следует d
.
Кроме того, вы должны привязать регулярное выражение к началу строки, чтобы повысить производительность. В Java метод .matches()
сделает это для вас неявно.
Тогда в настоящее время вашему регулярному выражению требуется только одна цифра, но два алфавита ASCII (один строчный, один верхний регистр). Это действительно то, что вы хотите?
Я бы интерпретировали ваши требования, как это:
if (subjectString.matches("(?=.*\\d.*\\d)(?=.*[A-Za-z])(?=.*[@#$%]).{6,}")) {
// Password matches the criteria
} else {
// Password doesn't match the criteria
}
Вы хотите создать комбинации OR, чтобы соответствовать комбинации? –
Было бы полезно использовать некоторые примеры ввода и ожидаемые совпадения. – alan