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 :

Test alphanumérique avec preg_match [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 76
    Par défaut Test alphanumérique avec preg_match
    Bonjour
    Je dois tester qu'une variable ne contient que des caractères alphanumériques, des lettres accentuées et le tiret (-). Avec le pattern que j'ai écrit la fonction preg_match renvoie la valeur 1 (true).
    Pouvez-vous me dire ce qui ne va pas dans mon pattern ?
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ctrl_alphanum = '/([09a-zàâéèêïîöôüû-]*)/i';
    $zone_test = "0123456789 abcdefghij 1 - & > = + . ( / \ ";
    echo preg_match($ctrl_alphanum, $zone_test);

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ta chaine doit commencer et finir par ton ensemble de caractères et tu as oublié le tiret entre 0 et 9
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ctrl_alphanum = '/^[0-9a-zàâéèêïîöôüû-]*$/i';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 76
    Par défaut
    Ca marche, merci

    Euh, et bien non, ça ne marche pas car une chaine correcte n'est pas acceptée

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ctrl_alphanum = '/^[0-9a-zàâéèêïîöôüû-]*$/i';
    $zone_test = "0123456789 abcdefghij";
    echo preg_match($ctrl_alphanum, $zone_test);

  4. #4
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    Citation Envoyé par Papapetch Voir le message
    $ctrl_alphanum = '/^[0-9a-zàâéèêïîöôüû-]*$/i';
    parce que tu n'as pas accepté les espaces dans ton expression régulière
    avec ça, la chaîne est acceptée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ctrl_alphanum = '/^[0-9a-zàâéèêïîöôüû -]*$/i';

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 76
    Par défaut
    Cette règle fonctionne parfaitement ... sauf si la saisie comporte plusieurs lignes. Je pense que c'est la présence d'un retour-chariot qui provoque l'erreur.

    Comment accepter la présence d'un retour-chariot dans cette règle ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 76
    Par défaut
    J'ai lu cet article mais je ne comprends pas comment l'utiliser dans mon cas.
    Un exemple me serait bien utile.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ctrl_alphanum = '/^[0-9a-zàâéèêïîöôüû -]*$/is';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 76
    Par défaut
    Ca ne marche pas :
    Avec "0123 dhjhfi abcd-efghij" sur 1 seule ligne, OK
    La même chaine sur 2 lignes, KO

  10. #10
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Essaie plutôt avec le modificateur "m".

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pardon je m'ai gourré c'est "m" pour le multilignes.
    "s" inclu les retour et les nouvelles lignes au "."
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 76
    Par défaut
    Je crains de devenir barbant

    Je continue mes tests avec une chaine qui contient le caractère "$" qui doit être refusé : "0123 $dhjhfi abcd-efghij" (caractère spécial en milieu de chaine) ou "$0123 dhjhfi abcd-efghij" (caractère spécial en début de chaine).

    Lorsque la chaine est sur 1 ligne, le contrôle rejette la chaine.
    Lorsque la chaine est sur 2 lignes, le contrôle ne rejette pas la chaine.

    Par contre le contrôle rejette la chaine "0123 dhjhfi abcd-efghij$" (caractère spécial en fin de chaine) dans les deux cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ctrl_alphanum = '/^[0-9a-zàâéèêïîöôüû -]*$/im';

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    si tu mets ton $ dans une chaine a guillemets doubles, PHP l'interprete comme une variable.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 76
    Par défaut
    J'ai mis des guillemets dans le post pour délimiter précisement la chaine que j'utilise.

    Dans mes tests, la chaine (sans les guillemets) est saisie dans un formulaire

  15. #15
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    En fait le "m" considère chaque ligne ; donc si une ligne est valide, l'expression est valide.

    Essai comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ctrl_alphanum = '/^[0-9a-zàâéèêïîöôüû\n\r -]*$/';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 76
    Par défaut
    Cette fois-ci, c'est bon. J'ai refait tous mes tests (faux, corrects, sur 1 ligne et sur 2 lignes).

    Merci beaucoup de tes conseils ... et de ta patience.

    Une remarque : je trouve l'utilisation de ces règles très compliquée et délicate à mettre au point. Lorsqu'il faut tester une variable avec une syntaxe particulière (ex : adresse email) je comprends que la description de la syntaxe nécessite ce genre de codage mais je m'étonne que pour des cas plus simples et plus fréquents il n'existe pas d'autre fonctions que ces règles.

  17. #17
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est complexe car les besoins de chacun sont complexes.
    L'ecriture qu'on a ici est finalement très simple.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 24/05/2007, 10h32
  2. [RegEx] soucis avec preg_match
    Par cassy dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2007, 15h33
  3. [RegEx] validation avec preg_match
    Par G_Kill dans le forum Langage
    Réponses: 2
    Dernier message: 15/11/2006, 00h45
  4. Tests unitaires avec vbUnit sur des contrôles utilisateurs
    Par Patrick Mortas dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/09/2006, 18h06
  5. test unitaire avec python
    Par Abla23 dans le forum Zope
    Réponses: 4
    Dernier message: 30/06/2006, 13h04

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