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 :

Connaitre le caractère problématique avec une expression regulière


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Points : 83
    Points
    83
    Par défaut Connaitre le caractère problématique avec une expression regulière
    Bonjour, voila je dois récupérer le contenu d'un fichier text dans un buffer.

    Ensuite je dois parser ce contenu et voir si il n'y a que des caractères, espace ou tiret.

    Voici comment je procède :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function isCorrectContent($buffer)
    {
    	//check : ke des lettres ou espaces ou chiffres ou -
    	if(eregi("^[-a-zA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ ]+$", $buffer)) 
    		return 1;
    	else
    		return 0;
    }
    1er problème : apparemment cette expression régulière n'est pas valide car je lui soumet un fichier a priori correct et il me renvoi 0!!
    Ok je viens de résoudre ce 1er problème, il falalis simplement rajouter le retour à la ligne \r\n car mon fichier text en contient. Par contre, pas de réponse pour mon 2ème problème
    2eme problème : j'aimerai connaitre, lorsque cela retourne faux, l'endroit où ça a planté (le numéro du caractère en partant du début, donc de 0).

    Pouvez-vous m'aider à cela?

    Merci.

  2. #2
    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
    Citation Envoyé par benthebest
    2eme problème : j'aimerai connaitre, lorsque cela retourne faux, l'endroit où ça a planté (le numéro du caractère en partant du début, donc de 0).
    Il faut se tourner vers les fonctions PCRE et non posix (qui sont, de plus, obsolètes). Mais il sera nécessaire de changer l'expression pour adapter le motif de tel façon que la correspondance puisse donner cette partie (donc son contraire). Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $string = 'radar';
    if (preg_match('#[^ar]#', $string, $matches, PREG_OFFSET_CAPTURE)) {
        printf("ko : le caractère '%s' n'est pas valide", $string{$matches[0][1]});
    } else {
        echo 'ok';
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Points : 83
    Points
    83
    Par défaut
    Ok et merci de ces infos. J'ai donc utilisé la fonction preg_match comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function isCorrectContent($buffer)
    {
    	//check : ke des lettres ou espaces ou chiffres ou -
    	if(preg_match('#^[-a-zA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ\r\n ]+$#', $buffer)) 
    		return 1;
    	else
    		return 0;
    }
    Ce qui me donne le même résultat que pour ereg... La ok.

    Mais en ce qui concerne la 2ème partie de mon problème, j'ai testé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $buffer = file_get_contents($dossier . $fichier);
    		//echo $buffer;
    		if (preg_match('#^[-a-zA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ\r\n ]+$#', $buffer, $matches, PREG_OFFSET_CAPTURE))
    			echo 'ok';			
    		else
    			printf("ko : le caractère '%s' n'est pas valide", $buffer{$matches[0][1]});
    Et il s'avère qu'il me renvoi le 1er caractère du fichier et non le 1er caractère qui ne correspond pas au motif et qui provoque donc l'erreur...

    Y a t-il quelque chose qui m'aurai échapé?

    Merci.

  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
    Comme je le disais plus tôt, si vous voulez capturer le premier caractère indésirable il faut réécrire le motif en ce sens. C'est-à-dire qu'au lieu de dire ma chaîne ne doit être composée que de ces caractères (comme vous le faites), il faut chercher si celle-ci ne possède pas, au moins, un caractère autre. Donc la réécrire de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		if (preg_match('#[^-a-zA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ\r\n ]#', $buffer, $matches, PREG_OFFSET_CAPTURE))
    			printf("ko : le caractère '%s' n'est pas valide", $buffer{$matches[0][1]});
    		else
    			echo 'ok';
    (ce qui inverse les cas if/else à moins de nier le résultat de preg_match - opérateur ! ou équivalent)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Points : 83
    Points
    83
    Par défaut
    Ah ok désolé je n'avais pas bien saisi....
    Encore merci

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

Discussions similaires

  1. Probleme avec une expression regulière
    Par anasweb dans le forum Général Python
    Réponses: 3
    Dernier message: 30/10/2009, 19h39
  2. Réponses: 3
    Dernier message: 29/10/2009, 09h31
  3. [PHP 5.2] Ajout de caractère avec une expression régulière
    Par zerros dans le forum Langage
    Réponses: 2
    Dernier message: 07/04/2009, 11h45
  4. [FAQ] Comment tester une chaîne de caractères avec une expression régulière ?
    Par Baptiste Wicht dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 20/11/2007, 19h43
  5. ET dans une expression regulière
    Par kesako dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2005, 12h57

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