Как исправить регулярное выражение, чтобы оно работало?
Нужно написать регулярное выражение. Cтрока должна содержать:
- хотя бы одно число
- хотя бы две буквы латинского алфавита в разных регистрах
- хотя бы один символ из ряда
! ? . , + - * / = - содержит не менее
10символов
Вот мои потуги
/[a-z]{1,}[A-Z]{1,}[0-9]{1,}[!\?\.,\+\*/=]{1,0}{10,}/
Однако, выдает кучу ошибок. Очевидно, я не понимаю как сделать условие "хотя бы". Как дописать regexp чтобы оно получилось верное?
UPDATE
Для меня сработало это:
/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!?.,+*\/=-]).{10,}$/
Ответы (2 шт):
Автор решения: Leonid
→ Ссылка
Предлагая явно расписать каждое условие для наглядности.
const {log,dir} = console;
const input = document.querySelector('input');
input.addEventListener('change', e => {
checkString(e.target.value);
})
String.prototype.howmuch = function(pattern){
return [...this.matchAll(pattern)].length;
}
function checkString(string){
if(string.howmuch(/\d/g) >= 1 &&
string.howmuch(/[a-z]/g) >= 1 &&
string.howmuch(/[A-Z]/g) >= 1 &&
string.howmuch(/[!|?|.|,|+|\-|*|/|=]/g) >=1 &&
string.length >= 10
){
log('Yes it has all');
} else {
log('Something has missed');
}
}
<input type="text">