IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

4 caractères différents et. [RegExp]


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Par défaut 4 caractères différents et.
    Bonjour à vous, ça fait quel que heure où j'essaie de faire une expression régulière et je ne suis pas capable de réussir.

    j'ai un formulaire et le 'pseudonyme' doit contenir : au moins 8 caractères (de a à z et de 0 à 9) avec au moins 4 caractères différents


    Là où ça coince c'est comment je fais pour distinguer 4 caractères différents?

    merci à ceux et celle qui veulent bien m'aider

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Salut,

    Teste pseudo avec les valeurs que tu veux; Si c'est entre 4 et 8 caractères alphanumériques et qu'il y a au moins 4 caractères différents, ça devrait passer;

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const pseudo="";
    const check=new Set(pseudo);
    console.log(/^\w{8,12}$/.test(pseudo) && new Set(pseudo).size>3);

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Par défaut
    fonctionne très bien j'ai testé dans la console.

    Toutefois pour l'intégration dans mon code je crois que j'applique pas comme il se doit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    msgErr = "";
    pseudo = f.pseudonyme.value.trim();
    if (pseudo === "") {             
       msgErr = "Obligatoire";
    } else {  
       regExp    = /^\w{8,12}$/;                  
       if (!regExp.test(pseudo) && new Set(pseudo).size>3){
       msgErr = "Entrer 8 caractères avec au moins 4 caractères différents (de a à z et de 0 à 9)";
       }
    }
    f.pseudonyme.value = pseudo;
    if (msgErr !== "") erreur = true;
    document.getElementById("errPseudonyme").innerHTML = msgErr;

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 982
    Par défaut
    Si tu veux juste les caractères de a à z et de 0 à 9, la classe de caractères à utiliser est [a-z0-9] et non pas \w qui contient en plus les caractères de A à Z et l'underscore _.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    !regExp.test(pseudo) && new Set(pseudo).size>3
    Ce n'est pas comme ça qu'on fait une négation.

    non (A et B) = non A ou non B donne donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    !regExp.test(pseudo) || new Set(pseudo).size <4
    La variable regExp ne sert pas à grand chose (et ressemble beaucoup au nom de la classe RegExp), à ta place je m'en passerai d'autant plus que la pattern est courte.

    Pour le fun, en une (vilaine) pattern: /^(?=[a-z0-9]{8,12}$)(.)(?=(\1*))\2(.)(?=((?:\1|\3)*))\4(.)(?=((?:\1|\3|\5)*))\6./ (à ne pas utiliser, la méthode de javatwister est bien plus élégante). La construction (?=(\1*))\2 permet d'émuler le quantificateur possessif qui n'est pas disponible en Javascript, soit \1*+.

    On peut aussi utiliser les quantificateurs non-gourmands: /^(?=[a-z0-9]{8,12}$)(.).*?(?!\1)(.).*?(?!\1|\2)(.).*?(?!\1|\2|\3)./ mais l'une comme l'autre ne sont pas extensibles à l'infini (plus on veut de caractères différents plus les patterns seront longues).

  5. #5
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Oui, CosmoKnacki, j'avais fait le truc à la va-vite;

    Donc, pour exclure l'underscore et autoriser les majuscules (on a le droit, hein?):

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!/^[^\W_]{8,12}$/.test(pseudo) || new Set(pseudo).size < 4){

    Tu peux aussi personnaliser le message en fonction des priorités attendues:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const msgErr = !/^[^\W_]{8,12}$/.test(pseudo) ?
    	"Veuillez saisir entre 8 et 12 caractères alphanumériques." :
    	new Set(pseudo).size < 4 ? 
    	"Il faut au moins 4 caractères différents." :
    	"Bonne saisie."

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Par défaut
    Merci a vous pour vos explication se fut très intéressant j'ai même appris une nouvelle façon d’écrire le code et sauvé une ligne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Caractères différents après import de chez Free
    Par jilibi dans le forum Débuter
    Réponses: 0
    Dernier message: 09/04/2008, 18h54
  2. Réponses: 6
    Dernier message: 13/01/2008, 18h59
  3. Réponses: 10
    Dernier message: 14/04/2007, 18h57
  4. Réponses: 28
    Dernier message: 11/10/2006, 22h36
  5. Réponses: 1
    Dernier message: 22/06/2006, 19h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo