Je répondrais à Peter Mortensen, mais je n'ai pas assez de réputation.
Ses expressions sont parfaites pour chacune des exigences minimales spécifiées. Le problème avec ses expressions qui ne nécessitent pas de caractères spéciaux est qu'elles n'autorisent pas non plus les caractères spéciaux, elles imposent donc également des exigences maximales, ce que je ne crois pas que l'OP ait demandé. Normalement, vous voulez permettre à vos utilisateurs de rendre leur mot de passe aussi fort qu'ils le souhaitent; pourquoi restreindre les mots de passe forts?
Ainsi, son expression "au moins huit caractères, au moins une lettre et un chiffre":
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$
atteint l'exigence minimale, mais les caractères restants ne peuvent être que des lettres et des chiffres. Pour autoriser (mais pas exiger) des caractères spéciaux, vous devez utiliser quelque chose comme:
^(?=.*[A-Za-z])(?=.*\d).{8,}$
pour autoriser tous les caractères
ou
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$
pour autoriser des caractères spéciaux spécifiques
De même, "au moins huit caractères, au moins une lettre majuscule, une lettre minuscule et un chiffre:"
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
répond à cette exigence minimale, mais autorise uniquement les lettres et les chiffres. Utilisation:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
pour autoriser tous les caractères
ou
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,}
pour autoriser des caractères spéciaux spécifiques.