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 Perl Discussion :

Expression régilière: ne pas accepter de caracères spéciaux


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 88
    Points : 49
    Points
    49
    Par défaut Expression régilière: ne pas accepter de caracères spéciaux
    Bonjour,

    J'aimerai faire une expression régulière pour faire en sorte de détecter si une variable est conforme a mon utilisation.
    Pour se faire ma variable est autoriser a avoir des lettre et chiffre en majusucle et minuscule, je dois donc ignorer tous les caractère spéciaux genre:+/*-@_ ...

    Mais je n'arrive pas a faire ce que je veux.

    J'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ($monstring = /[0-9a-zA-Z/) {
         print "OK"
    } else {
        print "KO"
    }
    Mais sa ne marche pas. Pourquoi??

    merci

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut Re: Expression régilière: ne pas accepter de caracères spéci
    Citation Envoyé par danje
    J'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ($monstring = /[0-9a-zA-Z]/) {
         print "OK"
    } else {
        print "KO"
    }
    Mais sa ne marche pas. Pourquoi??
    Parce que tu ne fais pas la mise en correspondance entre ta variable et l'expression rationnelle ...

    Il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ($monstring =~ /[0-9a-zA-Z/) {
         print "OK"
    } else {
        print "KO"
    }
    En faisant comme tu as fait, on ne sait pas trop ce qui peut se produire ...
    En tous cas, le contenu de $tachaine est perdu, avec ta façon de faire.
    (Les malicieux comprendront pourquoi je n'ai pas mis le nom de TA variable dans la phrase ci-dessus)


    Bonne continuation

    [Edit]Oups, j'avais aussi oublié le crochet fermant, merci djibril[/Edit]

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ($monstring =~ /[0-9a-zA-Z]/) { 
         print "OK" 
    } else { 
        print "KO" 
    }
    =~ et non =
    tu dois fermer ton crochet

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 88
    Points : 49
    Points
    49
    Par défaut
    J'ai essayé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                   if($nickname = ~/[0-9a-zA-Z]/){
                      $DEBUG.="OK\n";
                   } else {
                      $DEBUG.="KO";
                   }
    Mais ça ne marche pas non plus, d'ailleurs ne faut-il pas mettre == au lieu de =??)

    Avec mon code la, seul les majuscule sont autorisé.
    Moi je veux pouvoir accepté des chaine;-) de ce type:
    AAAA AAaA 1A1aA
    et ignoré celle qui serait comme ça:
    A-*A A@aE1

    Suis paumé

  5. #5
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Bah déjà tu fait une affectation dans ta condition et pas une recherche de motif...de plus, il te manque le crocher droit...
    Pour une recherche de motif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($monstring =~ /[0-9a-z]/i) {
    Et ceci signifie que tu va matcher toute chaine qui possède au moins un chiffre ou une lettre (peu importe la casse avec 'i'). Ce n'est donc pas ce que tu veux.
    Regardes donc un peu plus précisément les docs Perl et reprends ton expression régulière.

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 88
    Points : 49
    Points
    49
    Par défaut
    Finalement j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                   if($nickname/[0-9a-zA-Z]/){
                      $DEBUG.="OK\n";
                   } else {
                      $DEBUG.="KO";
                   }
    Le caractere £ represente la "vague". Desole mais firefox ne me prend pas ce caractere.

    Hors ça ne marche pas, la il m'accepte bien des string avec des majuscule minuscule et chiffre le tout combiné, mais des que je mais un caractere autre que ceux la il m'acepte aussi.

    Je pige rien!!!

  7. #7
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Citation Envoyé par danje
    Finalement j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                   if($nickname/[0-9a-zA-Z]/){
                      $DEBUG.="OK\n";
                   } else {
                      $DEBUG.="KO";
                   }
    Le caractere £ represente la "vague". Desole mais firefox ne me prend pas ce caractere.

    Hors ça ne marche pas, la il m'accepte bien des string avec des majuscule minuscule et chiffre le tout combiné, mais des que je mais un caractere autre que ceux la il m'acepte aussi.

    Je pige rien!!!
    As-tu lu mon post ?

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 88
    Points : 49
    Points
    49
    Par défaut
    Oui j'ai lu ton post, et je lis la doc, mais a vrai dire je ne vois pas ou ça se trouve

    Mais merci je regarde encore cette doc de haut en bas.

  9. #9
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($monstring =~ /[0-9a-z]/i)
    dans ta condition, cela veut dire que $monstring va obtenir un chiffre ou une lettre. donc si tu mets , ta condition sera vraie puisque ta variable contient 1 et toto.
    Pense plutôt à ce que tu veux exclure de tes variables et pense à une condition du genre
    $monstring ressemble à tout sauf tes caracteres spéciaux.

  10. #10
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par danje
    Le caractere £ represente la "vague". Desole mais firefox ne me prend pas ce caractere.
    Je fais aussi ce message sous Firefox

    Si taper ~ tout seul ne marche pas, tape ~, puis la barre d'espace, juste après ...

    Citation Envoyé par danje
    Hors ça ne marche pas, la il m'accepte bien des string avec des majuscule minuscule et chiffre le tout combiné, mais des que je mais un caractere autre que ceux la il m'acepte aussi.

    Je pige rien!!!
    C'est parce que ton motif correspond à 1 caractère. Si tu veux traiter toute la chaine, il faut dire que tu ne veut avoir QUE ce motif entre le début et la fin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if($nickname =~ /^[0-9a-zA-Z]*$/){
                      $DEBUG.="OK\n";
                   } else {
                      $DEBUG.="KO";
                   }
    Le ^ représente le début de chaine
    Le * veux dire n fois le motif, de façons consécutives
    Le $ représente la fin de chaine.

    Pour ce qui est de ton motif élémentaire : [0-9a-zA-Z], il peut aussi être remplacé par [:alnum:]

    Bon courage.

  11. #11
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 88
    Points : 49
    Points
    49
    Par défaut
    Ok merci, donc je viens de comprendre le "truc", je vais de totue façon m'exercer a en faire plusieurs.

    Pour ce qui est de la "vague" des que je l'ecrit dans firefox sous Suse, il me remplace el caractere par un _ :p

    M'enfin c'ets pas grave

    Encore merci

Discussions similaires

  1. Je n'affiche pas les caracères spéciaux.
    Par Gregory.M dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 29/12/2008, 16h45
  2. [PHP-JS] Fonction header pas acceptée
    Par carelha dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2006, 18h41
  3. nom de formulaire en arabe n'est pas accepter.
    Par hocine dans le forum IHM
    Réponses: 3
    Dernier message: 26/11/2005, 12h25
  4. [Applet][XML] Ne pas interpréter les caractères spéciaux
    Par leminipouce dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 28/07/2005, 16h15
  5. Réponses: 2
    Dernier message: 21/02/2005, 10h42

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