Как исправить регулярное выражение, чтобы оно работало?

Нужно написать регулярное выражение. 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">

→ Ссылка
Автор решения: Qwertiy
/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[-!?.,+*\/=]).{10,}$/
→ Ссылка