Регулярное выражение, которое требует обязательного наличия цифр и латинских букв и разрешает использование других символов из списка
Нужно сделать регулярное выражение, которое будет разрешать вводить символы из списка и требовать обязательного наличия латинских букв и цифр. (кириллицу и спецсимволы, если их нет в списке - нельзя)
Сейчас работает так, что запрещено все, кроме того, что указано в списке, но как сделать чтобы буквы и цифры были еще и обязательными?
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 шт):
Можно было бы использовать 3 разных проверки, либо же использовать так называемые lookahead-ы - то есть опережающие или ретроспективные проверки.
В итоге ваша регулярка будет похожа на ^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).*$
UPD
Просто бы добавили все что можно использовать после лукахэдов..

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