JavaScript crude password requirement checker

Wed, 30 September 2020

password-requirements.js
/**
 * Validate whether a password is at least {minLength} long and matches at 
 * least {minCriteria} of the requirements.
 * Checks whether the password containers at least 1 of the following:
 *     - Lower case
 *     - Upper case
 *     - Number
 *     - Special character
 * @param {String} val
 * @param {number} minLength
 * @param {number} minCriteria
 * @returns {boolean}
 */
let passwordMatchesRequirements = function(val, minLength, minCriteria) {
    if (val.length < minLength) {
        return false;
    }
    let lower = 'abcdefghijklmnopqrstuvwxyz';
    let upper = lower.toUpperCase();
    let lowerSplit = lower.split('');
    let upperSplit = upper.split('');
    let numbers = '0123456789';
    let numbersSplit = numbers.split('');
    let hasUpper = false;
    let hasLower = false;
    let hasNumbers = false;
    let hasSpecial = false;
    let valPieces = val.split('');
    let c = 0;
    for (let i=0;i<valPieces.length;i++) {
        if (hasUpper === false && upperSplit.indexOf(valPieces[i]) !== -1) {
            hasUpper = true;
            c++;
            continue;
        }
        if (hasLower === false && lowerSplit.indexOf(valPieces[i]) !== -1) {
            hasLower = true;
            c++;
            continue;
        }
        if (hasNumbers === false && numbersSplit.indexOf(valPieces[i]) !== -1) {
            hasNumbers = true;
            c++;
            continue;
        }
        if (hasSpecial === false && (upperSplit.indexOf(valPieces[i]) === -1 && lowerSplit.indexOf(valPieces[i]) === -1) && numbersSplit.indexOf(valPieces[i]) === -1) {
            hasSpecial = true;
            c++;
        }
    }

    return c >= minCriteria;
};