2 votes

Vérifier au moins 4 caractères différents dans le mot de passe

J'ai besoin d'une regex qui vérifie si une chaîne (mot de passe) contient : des lettres, des chiffres, au moins 6 caractères (longueur) ET (c'est là que le bât blesse) au moins 4 caractères différents.

(Le mot de passe peut contenir uniquement des lettres ou uniquement des chiffres, mais au moins 4 caractères différents).

Jusqu'à présent, je l'ai utilisé, mais il ne peut pas vérifier au moins 4 caractères différents.

/^\S(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,}$/i

Merci si vous avez une idée

0voto

MikeM Points 5873

En supposant que la chaîne puisse contenir sólo lettres et chiffres, voici un exemple d'expression rationnelle JavaScript qui répond à vos exigences :

const regex = /^(?=.*(.).*(?!\1)(.).*(?!\1|\2)(.).*(?!\1|\2|\3).)[a-z\d]{6,}$/i;

console.log(regex.test('abc'));       // false
console.log(regex.test('abcbaa'));    // false

console.log(regex.test('abcdaa'));    // true

0voto

The fourth bird Points 40138

Si vous ne voyez pas d'inconvénient à ce qu'un contrôle supplémentaire soit effectué pour rendre un peu plus flexible la partie "au moins 4 caractères différents", vous pouvez utiliser votre modèle en combinaison avec un Set.

const regex = /^(?=[^a-z\n]*[a-z])(?=[^\d\n]*\d)[a-z\d]{6,}$/i;
const check = (s) => regex.test(s) && (new Set(s)).size > 3;
[
  "abc5",
  "abcdef",
  "123456",
  "aaaaa1",
  "aaaa12",
  "abcbaa",
  "abcdaa",
  "aaa123",
  "abc1aa",
  "1112ab"

].forEach(s =>
  console.log(`${s} --> ${check(s) ? "Match" : "No match"}`)
)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X