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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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
    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
    Membre expérimenté

    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
    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
    Membre averti
    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
    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 éclairé 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
    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
    Membre expérimenté

    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
    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

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, 09h19
  2. recherche de caractères dans une chaine
    Par schuller dans le forum Langage
    Réponses: 12
    Dernier message: 04/12/2008, 17h01
  3. Réponses: 4
    Dernier message: 07/12/2006, 11h01
  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, 21h39
  5. recherche de mots dans une chaine de caractères
    Par jeanfrancois dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2006, 10h47

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