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

  1. #1
    Membre habitué
    Récupérer 1 à 10 AlphaNum avec au moins un Alpha et un Num
    Bonjour à tous,
    je suis un peu perdu parmi les RegEx.
    je ne parviens pas à écrire l'expression régulière suivante: chaine de 1 à 10 caractères alphanumérique avec au moins un caractère alpha et au moins un caractère numérique.
    Quelqu'un pourrait-il m’éclairer SVP ?
    d'avance merci

  2. #2
    Membre habitué
    j'ai réussi en la faisant comme ca mais je me demande si y'a pas plus simple...
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    static function string($string,$minChar,$maxChar)                    
    {                                                                    
    if(preg_match("%^([0-9a-zA-Z]){". $minChar .",". $maxChar."}$%",$string) AND preg_match("%([0-9]){1,}%",$string) AND preg_match("%[a-zA-Z]{1,}%",$string)){                    
        return true;                                                                                                                                                               
    } else {
    return false
    }
    }

  3. #3
    Expert confirmé
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $pattern = '~\A (?=.*[0-9]) (?=.*[a-z]) [0-9a-z]{1,10} \z~xi';


    En l'état actuel, ta fonction autorise une chaîne se terminant par un saut de ligne. C'est dû au coté fourbe de l'ancre $, c'est pourquoi il faut mieux opter pour le couple \A \z pour le début et la fin de chaîne.

    Immédiatement après le début de chaîne, on utilise deux tests avant (lookahead) pour vérifier la présence d'un chiffre et d'une lettre. La particularité de ces tests avant est qu'ils ne consomment pas de caractères, autrement dit, une fois la parenthèse fermée, on est toujours au même endroit qu'avant la parenthèse ouvrante; on peut donc empiler ce genre de tests à l'infini.

    Le modificateur i rend la pattern insensible à la casse (donc le rang a-z vaut pour a-zA-Z), quant à x il permet d'ignorer les espaces et d'écrire une pattern plus lisible.

    Attention: && et AND ne sont pas équivalents car ils ont des précédences différentes (voir manuel PHP), par défaut on utilise && pour des conditions simples ne nécessitant pas de subtilités particulières (et la plupart du temps les développeurs préfèrent coller des parenthèses plutôt que d'utiliser AND).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Rédacteur/Modérateur

    Perso je préfère décomposer ...
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $str=["azeze","123","32132k1","AB56","erET5LPO","jkhè","321654987lkjkljlkj"];
    $rega="~[a-z]~iu";
    $regn="~[0-9]~";
    $regl="~^.{1,10}$~";
    $i=-1;
    while(isset($str[++$i])){
     
        $boola= (preg_match($rega,$str[$i])===1  );
        $booln= (preg_match($regn,$str[$i])===1  );
        $booll= (preg_match($regl,$str[$i])===1  );
     
        echo ( ( $boola  )?"pass a":"fail a") ."<br/>";
        echo ( ( $booln  )?"pass n":"fail n") ."<br/>";
        echo ( ( $booll  )?"pass l":"fail l") ."<br/>";
     
        $res=($boola && $booln && $booll)?'<span style="color:green">OK</span>':'<span style="color:red">KO</span>';
        echo $str[$i] ." => ". $res;
        echo "<br/><br/>";
    }

    [edit] code rationalisé pour un seul test sur chaque reg[/edit]
    C'est beaucoup plus clair pour la maintenance ...
    ça permet également de retourner un message plus clair à l'utilisateur sur l'erreur de saisie (au moins un chiffre, au moins une lettre, longueur ...)
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

    réalisations :www.oxygen-translations.fr|www.saftair.fr| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

###raw>template_hook.ano_emploi###