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

Langage PHP Discussion :

Expression régulière sur des caractères alphanumériques [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut Expression régulière sur des caractères alphanumériques
    Voilà je cherche à savoir si des caractères sont alphanumériques et sans accent.
    J'ai testé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $caractere = 'élection';
    if(preg_match("/[a-z0-9]+/",$caractere)) {
    	echo "bon";
    } else {
    	echo "pas bon";
    }
    Et là il me met que c'est "bon".
    Mais des que je mets des "bonnes lettres" il me dit que c'est bon.

  2. #2
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Dans ce cas ca marche, mais ya surement mieux. Ton pb vient du fait que tu le résultat que tu test est celui du dernier caractère de ta chaÎne.
    Il faut aussi que tu accepte les majuscules (enfin, il me semble).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $caractere = 'é';
    if(preg_match("/[A-Za-z0-9]+/",$caractere)) {
    	echo "bon";
    } else {
    	echo "pas bon";
    }
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    J'ai testé ça comme code :
    if(preg_match('/^[a-zA-Z0-9]*$/',$caractere))


    ou


    if(preg_match('`[^a-zA-Z0-9]`',$caractere))
    Apparement ça marche bien va savoir pourquoi.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Il faut soit jouer sur la négation soit c'est une question d'ancrage : le résultat revient au même.

    Dans votre code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $caractere = 'élection';
    if(preg_match("/[a-z0-9]+/",$caractere)) {
    	echo "bon";
    } else {
    	echo "pas bon";
    }
    Il est normal d'obtenir "bon" pour résultat puisqu'il n'y a pas d'ancrage et la correspondance portera sur la partie "lection" de la chaîne. (il n'y a qu'à préciser le paramètre matches et l'exploiter pour vérifier)

    Pour conserver le principe il faut donc marquer le début et la fin de la chaîne (respectivement ^ et $), ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $caractere = 'élection';
    if(preg_match("/^[a-z0-9]+$/",$caractere)) {
    	echo "bon";
    } else {
    	echo "pas bon";
    }
    Le résultat sera ainsi correct.

    Comme vous l'avez justement proposé ci-dessus, il est possible d'écrire le contraire, c'est à dire chercher à savoir si la chaîne contient au moins un caractère qui n'est pas alphanumérique (et excluant les caractères accentués). Ce qui se traduit par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $caractere = 'élection';
    if (!preg_match("/[^a-z0-9]/",$caractere)) {
    	echo "bon";
    } else {
    	echo "pas bon";
    }
    Pour être strict par rapport à votre définition il faudrait, a priori, prendre compte de la casse (en rajoutant A-Z dans la classe ou tout simplement le modificateur i).

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

Discussions similaires

  1. Expressions régulières sur chaîne de caractères
    Par Arjuna dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2012, 11h51
  2. [RegEx] Expression régulière sur des nombres entiers
    Par wind_of_o dans le forum Langage
    Réponses: 8
    Dernier message: 12/12/2011, 18h12
  3. Expression régulière sur des nombres
    Par lola06 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2011, 11h42
  4. expression régulière sur flux
    Par zais_ethael dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 19/09/2006, 23h38
  5. [FLASH MX2004] Pb sur des caractères accentués.
    Par sandrineLL dans le forum Flash
    Réponses: 3
    Dernier message: 05/08/2004, 14h18

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