Регулярное выражение, которое требует обязательного наличия цифр и латинских букв и разрешает использование других символов из списка

Нужно сделать регулярное выражение, которое будет разрешать вводить символы из списка и требовать обязательного наличия латинских букв и цифр. (кириллицу и спецсимволы, если их нет в списке - нельзя)

Сейчас работает так, что запрещено все, кроме того, что указано в списке, но как сделать чтобы буквы и цифры были еще и обязательными?

function test(value) {
  const passReg = /^[a-zA-Z\d!@#$%^&*()_\-=+\\|[\]{}:;.,<>?]+$/;
  console.log(passReg.test(value));
}
<input oninput=test(event.target.value)>

то есть при вводе 111 должна быть ошибка и при вводе Aaa или ф1111f тоже, а вот 111aaa должно пропускать


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

Автор решения: SelectionForCollection

Можно было бы использовать 3 разных проверки, либо же использовать так называемые lookahead-ы - то есть опережающие или ретроспективные проверки. В итоге ваша регулярка будет похожа на ^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).*$

UPD

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

UPD2 - забыл прикрепить регулярку со скрина - ^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).*[a-zA-Z/d!@#$%^&*()_\-=+\\|[\]{}:;.,<>?]$

Bот ссылка

→ Ссылка
Автор решения: ipatev_nn

Используйте позитивный просмотр вперед
(?=.*[A-Z]) - наличие буквы в верхнем регистре
(?=.*[a-z]) - наличие буквы в нижнем регистре
(?=.*\d) - наличие цифры

function test(value) {
  const passReg = /(?=.*[A-Z])(?=.*[a-z])(?=.*\d)^[a-zA-Z\d!@#$%^&*()_\-=+\\|[\]{}:;.,<>?]+$/;
  console.log(passReg.test(value));
}
<input oninput=test(event.target.value)>

→ Ссылка
Автор решения: Andrey Semykin

Почему бы не сделать так?

function test(value) {
  const passReg = /^[a-zA-Z\d!@#$%^&*()_\-=+\\|[\]{}:;.,<>?]+$/;
  console.log(passReg.test(value) && /\d/.test(value) && /[a-z]/i.test(value));
}
<input oninput=test(event.target.value)>

→ Ссылка