Oui?
Honnêtement, qu'est-ce que vous demandez? Pourquoi ne le testez-vous pas?
Si, vous voulez cependant des suggestions à l'améliorer, quelques questions:
- Qu'est-ce que ce regex contrôle pour?
- Pourquoi avez-vous un si grand nombre de caractères autorisés? Pourquoi ne pas utiliser
/\w/
au lieu de /0-9a-zA-Z_/
? Pourquoi avez-vous le tout dans ()
s?Vous n'avez pas besoin de capturer le tout, puisque vous avez déjà le tout, et ils ne sont pas nécessaires pour regrouper quoi que ce soit.
Ce que je voudrais faire est de vérifier la longueur séparément, puis vérifiez contre un regex pour voir si elle a des mauvais caractères. Votre liste de bons personnages semble être suffisamment grande pour qu'il soit plus facile de le faire de cette façon. Mais cela peut dépendre de ce que vous faites pour.
EDIT: Maintenant que je sais que c'est PHP-centrique, /\w/
est en sécurité parce que PHP utilise la bibliothèque PCRE, qui est pas exactement Perl, et dans PCRE, \w
sera pas correspondance des caractères Unicode mot. Ainsi, pourquoi ne pas vérifier la longueur et assurez-vous qu'il n'y a pas de caractères non valides:
if(strlen($string) >= 4 && preg_match('[\s~\\]', $string) == 0) {
# valid password
}
Vous pouvez également utiliser le caractère peu utilisé POSIX classe [[:graph:]]
. Cela devrait fonctionner à peu près de la même façon en PHP qu'en Perl. [[:graph:]]
correspond à n'importe quel caractère alphanumérique ou de ponctuation, ce qui ressemble à ce que vous voulez, et [[:^graph:]]
devrait correspondre à l'opposé. Pour tester si tous les caractères correspondent graphique:
preg('^[[:graph:]]+$', $string) == 1
Pour tester si tous les caractères ne correspondent pas graphique:
preg('[[:^graph:]]', $string) == 0
Si vous utilisez ceci pour la validation de mot de passe, ma question est la suivante: pourquoi limitez-vous les types de caractères qu'ils peuvent utiliser? Vous ne devriez vraiment avoir à vérifier qu'un nombre minimum de caractères – MahlerFive
Et 4 caractères est trop petit pour tout ce qui mérite d'être protégé. Et si cela ne vaut pas la peine d'être protégé, pourquoi ajouter un mot de passe? –
@MahlerFive Serait-ce suffisant? Veuillez noter que les mots de passe seront hachés + salés avant d'être vérifiés par rapport à la base de données. Si la vérification du nombre de caractères du mot de passe suffirait, je n'implémenterai plus cette regex. Comme je l'ai dit sur le commentaire ci-dessous, je n'ai utilisé que 4 en ce moment car il est actuellement encore en développement, et 4 caractères seraient plus faciles à taper lors de la connexion. – Nikko