Деление регулярного выражения на несколько условий

У меня есть input типа password. Для него, я использую регулярное выражение, которое выглядит так:

/^(?=.*?[A-Za-z])(?=.*?\d)(?=.*?[!@#$%^&*()]).{3,}$/

Это регулярное выражение отвечает за то, чтобы пароль обязательно содержал буквы, цифры и символы, независимо от порядка. Пожалуйста, помогите, разделить регулярное выражение так, чтобы оно должно было обязательно содержать, не зависимо от порядка: 1) Только символы и буквы 2) Только числа и символы 3) Только числа и буквы. Спасибо вам большое


Ответы (1 шт):

Автор решения: Артём

Я так понял, вам нужна проверка для пароля, но при этом она не должна быть слишком лёгкая (только буквы), но и не должна быть слишком сложная (символы, буквы и числа).

Моё регулярное выражение это ^((([a-z]+\d+)|(\d+[a-z]+))[a-z\d]+)|((([!@#$%^&*()]+\d+)|(\d+[!@#$%^&*()]+))[!@#$%^&*()\d]+)|((([!@#$%^&*()]+[a-z]+)|([a-z]+[!@#$%^&*()]+))[!@#$%^&*()a-z]+)$. Оно работает следующим образом:

  1. Я делю выражение на несколько частей (в вашем случае 3) с помощью знака |;
  2. ( ( ([a-z]+\d+) | (\d+[a-z]+) ) [a-z\d]+ ) - тут я проверяю начинается ли с буквы и продолжается ли цифрой (abc123), начинается ли с цифры и продолжается ли буквой (123abc), продолжается ли буквой или цифрой повторно (abc123abc).
  3. Выражение также работает и на буквы, цифры и символы, так как оно не содержит условия "не включать выражение" - "(?![a-z])" (не включать a-z).

Вот моё решение вашей задачи:

const regex = new RegExp(/^((([a-z]+\d+)|(\d+[a-z]+))[a-z\d]+)|((([!@#$%^&*()]+\d+)|(\d+[!@#$%^&*()]+))[!@#$%^&*()\d]+)|((([!@#$%^&*()]+[a-z]+)|([a-z]+[!@#$%^&*()]+))[!@#$%^&*()a-z]+)$/i);

console.log(regex.test('password')); // только буквы
console.log(regex.test('12345678')); // только цифры
console.log(regex.test('!!!!!!!!')); // только символы

console.log(regex.test('pass1234')); // буквы и цифры
console.log(regex.test('pass!!!!')); // буквы и символы
console.log(regex.test('1234!!!!')); // цифры и символы

console.log(regex.test('pass12!!')); // буквы, цифры, символы

→ Ссылка