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 :

Recherche de caractère dans une chaine


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 39
    Points : 30
    Points
    30
    Par défaut Recherche de caractère dans une chaine
    Bonjour à tous,

    Mon problème est que j'ai une bdd contenant des numéros à 4 chiffres, mais parmis ceux la, quelques un dispose d'une lettre. Par exemple : E120.
    Je précise que les numéros sont du type Varchar et non integer.

    Chaque mois je mets à jour la bdd via un site développez en php. J'aimerais créer une fonction qui me retourne "true" si elle a trouvée une lettre dans mon numéro et "false" dans le cas contraire.

    Ce qui me permettrai de filtrer les numéros contenant une lettre car je ne veux pas d'eux dans ma base.

    Voici la fonction que j'ai developpé :
    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
     
    function test($entree)
    {
    $machaine = $entree;
    $tab_alpha = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
    for($i=0;$i<count($tab_alpha);$i++)
    {
    $find = $tab_alpha[$i];
    @$pos = stristr($machaine, $find);
    if($pos == false)
    {
    return false;
    }
    else
    {
    return true;
    }
    }
    }
    $entree = le numéro à tester.

    Mais elle ne fonctionne pas, quelqu'un pourrais me proposer une fonction semblable comprenant un while plutot qu'un for ou bien corriger la mienne ?

    Merci d'avance

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Peut-être que is_numeric() pourrait suffire dans ton cas pour savoir si ta chaine est un nombre ou non

  3. #3
    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 777
    Points
    17 777
    Par défaut
    Les expressions régulières c'est bien aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function test($entree) {
        return preg_match('/[[:alpha:]]/', $entree);
    }
    Pour corriger votre code, l'erreur se situe dans votre algorithme car vous renvoyez systématiquement true ou false suivant que le premier caractère n'est pas alpha ou l'est :
    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
    function test($entree)
    {
        $machaine = $entree;
        $tab_alpha = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
        for($i=0;$i<count($tab_alpha);$i++)
        {
            $find = $tab_alpha[$i];
            $pos = stristr($machaine, $find);
            if($pos != false)
            {
                return true;
            }
        }
        return false;
    }
    Vous auriez pu optimiser en remplaçant stristr par stripos et tab_alpha par une chaîne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function test($entree)
    {
        $tab_alpha = 'abcdefghijklmnopqrstuvwxyz';
        for ($i = 0, $l = strlen($tab_alpha); $i < $l; $i++)
        {
            if (stripos($entree, $tab_alpha[$i]) !== false)
            {
                return true;
            }
        }
        return false;
    }

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    Je vous remercie tous deux...

    Je ne peux cependant pas tester vos idées avant demain, donc je vous tiens au courant quand à la suite de l'histoire héhé merci

  5. #5
    Membre régulier Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 88
    Points
    88
    Par défaut
    Euh, je suis pas convaincu de l'existence de [:alpha:] dans les preg.... J'opterai plus pour un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function test ($str) {
        return (bool) preg_match("@[a-z]@i", $str);
    }
    qui teste la présence de lettres, mais sinon tu peux aussi faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function test ($str) {
        return !((bool) preg_match("@^[0-9]+$@", $str));
    }
    qui teste si on a bien des chiffres du début à la fin

  6. #6
    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 777
    Points
    17 777
    Par défaut
    Citation Envoyé par The Nux
    Euh, je suis pas convaincu de l'existence de [:alpha:] dans les preg....
    Il vous aurait suffit d'en faire l'essai et oui ça marche car il s'agit du nom des classes POSIX prédéfinies

  7. #7
    Membre régulier Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par julp
    Il vous aurait suffit d'en faire l'essai et oui ça marche car il s'agit du nom des classes POSIX prédéfinies
    Gloups grosse boulette de ma part... C'est bizarre on en parle nulle part dans la doc des PCRE de ces classes POSIX...
    M'en fout d'abord [A-Z] c'est plus court à écrire

  8. #8
    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 777
    Points
    17 777
    Par défaut
    Citation Envoyé par The Nux
    Gloups grosse boulette de ma part... C'est bizarre on en parle nulle part dans la doc des PCRE de ces classes POSIX...
    Mais si dans la doc de PCRE :
    Citation Envoyé par http://www.pcre.org/pcre.txt
    POSIX CHARACTER CLASSES

    alnum letters and digits
    alpha letters
    ascii character codes 0 - 127
    blank space or tab only
    cntrl control characters
    digit decimal digits (same as \d)
    graph printing characters, excluding space
    lower lower case letters
    print printing characters, including space
    punct printing characters, excluding letters and digits
    space white space (not quite the same as \s)
    upper upper case letters
    word "word" characters (same as \w)
    xdigit hexadecimal digits
    Elles sont toutes aussi valables pour les fonctions ereg_* (maintenant obsolètes).

    Citation Envoyé par The Nux
    M'en fout d'abord [A-Z] c'est plus court à écrire
    Comme souvent il n'y a pas qu'une solution

  9. #9
    Membre régulier Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 88
    Points
    88
    Par défaut
    En fait je m'étais limité à la doc de PCRE qu'on trouve dans PHP, et celle là n'en parle pas...
    Bon ben tant pis

Discussions similaires

  1. Rechercher un caractère dans une chaine.
    Par Milyshyn76 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/05/2009, 10h19
  2. recherche de caractères dans une chaine
    Par schuller dans le forum Langage
    Réponses: 12
    Dernier message: 04/12/2008, 18h01
  3. Réponses: 4
    Dernier message: 07/12/2006, 12h01
  4. [RegEx] recherche et replacement dans une chaine de caractère
    Par Ekimasu dans le forum Langage
    Réponses: 5
    Dernier message: 28/11/2006, 22h39
  5. recherche de mots dans une chaine de caractères
    Par jeanfrancois dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2006, 11h47

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