Регулярное выражение должно иметь два из трех типов символов

Я хочу протестировать строку, которая может состоять из трех типов символов:

1. алфавитные буквы (прописные или строчные) 2. числа 3. специальные символы (не буквенно-цифровые символы)

Я хочу проверить, содержит ли строка любые два из трех вышеуказанных типов символов (и не менее 8 символов) с регулярным выражением, прямо сейчас у меня есть следующее регулярное выражение

^(?=.*0-9)(?=.*[a-zA-Z])(?=.*[^A-Za-z0-9]).{8,}$

Однако кажется, что это проверяет, содержит ли строка каждый из трех типов символов, а не любые два из трех.

Кстати, я ищу чистое решение с регулярным выражением, я знаю, что эту проверку можно легко выполнить с помощью чего-то вроде следующего

types = 0;
if contains numbers then types++;
if contains alphabetic letters then types++;
if contains non-alphanumeric letters then types++;
if types >= 2 then pass; else fail;

Однако мне просто интересно, можно ли это сделать с помощью одной строки регулярного выражения.

Я думаю, что (?=.*0-9) должен быть (?=.*[0-9]) с использованием символьного класса.

The fourth bird 31.10.2018 13:14

да это опечатка, моя плохая.

hellopeach 31.10.2018 14:40
0
2
30
0

Другие вопросы по теме