Validation de mot de passe avec lettres séquentielles et numéros – RegEx

Pour que les comptes clients soient plus sécurisés, un mot de passe bien conçu est une bonne pratique. Ceci est ma chaîne d'expression régulière pour la validation du mot de passe.

/^(?=.*[0-9])(?!.*?\d{3})(?=.*[a-zA-Z])(?!.*?[a-zA-Z]{3})(?=.*[~!@#$%^&*()+-?])([a-zA-Z0-9~!@#$%^&*()+-?]{8,})$/ 

Représente:

  • 8 caractères ou plus.
  • Lettre majuscule AZ
  • Lettre minuscule az
  • Caractères spéciaux ~! @ # $% ^ & * () + -?
  • Quelle est cette fonction d'expression régulière pour cela ?: Ne doit pas contenir jusqu'à 3 lettres et / ou nombres séquentiels.

Avoir des nombres et / ou des lettres pour un ordre de 3 ou plus n'est pas OK.

Exemple:

Pas OK = efg123! $, Abcd567%, xyz789 ^ &, # hijk23456
OK = ryiiu562 @, erty745 #, gjnfl45566 ^

Je vous remercie

Il n'y a aucun moyen d'utiliser RegEx que je connais, mais voici une approche fonctionnelle naïve.

Tout d'abord, faites une boucle dans la chaîne et comparez chaque caractère par rapport aux deux caractères suivants en ajoutant +1 et +2 à l'indice actuel et en comparant de manière appropriée.

Deuxièmement, passe à nouveau la chaîne et comparez les deux derniers caractères contre le caractère actuel pour voir s'ils sont séquentiels.

Si les deux boucles ne parviennent pas à trouver des caractères séquentiels, la fonction renvoie true, sinon elle renvoie false.

Les quatre premiers renvoient faux (échec), tandis que les trois derniers renvoient vrai (passe).

 function test(s) { // Check for sequential numerical characters for(var i in s) if (+s[+i+1] == +s[i]+1 && +s[+i+2] == +s[i]+2) return false; // Check for sequential alphabetical characters for(var i in s) if (String.fromCharCode(s.charCodeAt(i)+1) == s[+i+1] && String.fromCharCode(s.charCodeAt(i)+2) == s[+i+2]) return false; return true; } // For demo purposes only var tests = [ 'efg123!$', 'abcd567%', 'xyz789^&', '#hijk23456', 'ryiiu562@', 'erty745#', 'gjnfl45566^' ], sep = '\t\u2192 ', out = ['Fail','Pass'], eol = '<br>'; document.write('<pre>'); for(var i in tests) document.write(tests[i] + sep + out[+test(tests[i])] + eol); document.write('</pre>');