7
votes

Regex pour mot de passe nécessitant un caractère numérique ou un caractère non alphanumérique

Je cherche une regex plutôt spécifique et je l'ai presque presque mais pas tout à fait.

Je veux une regex qui nécessiterait au moins 5 characteurs, où au moins un de ces caractères est une valeur numérique ou un caractère non alphanumérique.

C'est ce que j'ai jusqu'à présent: xxx

donc le problème est la partie "ou". Il permettra des valeurs non alphanumériques, mais nécessite toujours au moins une valeur numérique. Vous pouvez voir que j'ai le ou l'opérateur "|" entre mes numériques requis et le non-alphanumérique, mais cela ne semble pas fonctionner.

Toute suggestion serait géniale.


1 commentaires

Pour un caractère non alphanumérique, vous pouvez utiliser \ W (caractère non-Word, c'est-à-dire qu'aucune de [A-ZA-Z0-9_]) au lieu de [! @ # $% \ ^ * () _ \ - + = [{] } ;: | \ ./]


5 Réponses :


0
votes

Que diriez-vous comme ça? XXX

Pour la longueur 5,20 Veuillez utiliser la fonction SHLEN normale


2 commentaires

Cela ne fonctionne pas réellement, comme si vous voulez un caractère non alphanumérique ou numérique au début ou à la fin, cela échouera. Cependant, vous m'avez eu sur la bonne voie.


Avez-vous vraiment testé? Cela devrait fonctionner pour le caractère non alphanumérique ou numérique au début ou à la fin.



0
votes

Est-il vraiment nécessaire de tout cacher dans une regex géante? Utilisez simplement la logique du programme (5 ≤ longueur (s) ≤ 20) ∧ (/ [[[[[[DICT:]] / ∨ / [^ [[: alpha:]] /) . Beaucoup plus lisible syntaxiquement et sémantiquement, je pense.


1 commentaires

J'utilise l'adhésion à ASP.NET partout, il faudrait revenir en arrière et mettre en œuvre cette logique dans plusieurs endroits ainsi que des exceptions, etc. Il est plus facile d'utiliser RegEx dans la configuration des membres. Regex a sa place comme toutes les autres techniques de programmation.



1
votes

Peut-être que cela peut fonctionner pour vous: xxx pré>

et utilisez un code comme celui-ci pour vérifier la taille de la chaîne: p>

if(str.len >= 5 && str.len =< 20 && regex.ismatch(str, "^.*[\d\W]+.*$")) { ... }


1 commentaires

J'ai besoin de tout cela dans une regex pour mon problème actuel.



0
votes

Une solution assez simple, une fois que S.Mark m'a eu sur la bonne voie, il suffit de fusionner mes morceaux numériques et non alphanumériques comme un.

Voici le regex final de quiconque intéressé: p>

^(?=.*[\d!@#$%\^*()_\-+=\[{\]};:|\./])(?=.*[a-z]).{5,20}$


0 commentaires

20
votes

Essayez: xxx

une explication courte: xxx


3 commentaires

peur pas ... cela ne nécessite pas que vous ayez un numéro ou un caractère non alphanumérique


Oui. Je suppose que tu ne l'ai pas testé correctement? Le look à venir oblige la chaîne à contenir au moins un chiffre ou non.


... et si vous vouliez dire "un numéro et caractère non alphanumérique" à la place, cela fera la truc: ^ (? =. * \ D ) (? =. * \ W). {5,20} $