Solución:
Tu expresión regular
^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
en realidad debería funcionar bien, pero puede mejorarlo mucho eliminando el primer .*
:
^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
coincidirá con cualquier cadena de al menos 8 caracteres que contenga al menos un carácter ASCII en minúscula y una mayúscula y también al menos un carácter del conjunto @#$%^&+=
(en cualquier orden).
Aquí hay una función que puede utilizar.
function checkRegex(string) {
var checkSpecial = /[*@!#%&()^~{}]+/.test(string),
checkUpper = /[A-Z]+/.test(string),
checkLower = /[a-z]+/.test(string),
r = false;
if (checkUpper && checkLower && checkSpecial) {
r = true;
}
return r;
}
y luego verifique si es verdadero o falso.
var thisVal = document.getElementById('password').value;
var regex = checkRegex(thisVal);
Si var regex
es true
entonces la condición cumplida.
Se puede hacer rápidamente con 3 expresiones regulares.
function check($string){
return preg_match("/[`!%$&^*()]+/", $string)
&& preg_match("/[a-z]+/", $string)
&& preg_match("/[A-Z]+/", $string) ;
}
No olvide modificar la lista de caracteres especiales. Porque no sé qué personajes crees que son especiales.
Creo que perder mucho tiempo en una expresión regular de una sola línea sin ser un experto no aumentará su productividad. Esta solución de 3 expresiones regulares funcionará bien. Ahorra tiempo.