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 :

Chercher et extraire une info dans une chaine


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 3
    Points
    3
    Par défaut Chercher et extraire une info dans une chaine
    Bonjour!

    Je me retrouve dans le forum PHP parce que mon problème concerne les regex; mais c'est en fait en javascript que je code.
    J'ai vraiment besoin d'aide pour un vrai casse-tête...

    Je récupère des données dans une base de données et j'ai besoin de ce type d'information:
    "une crêpe, 32 g" -> 32
    "30g" -> 30
    "200ml reconstitué" -> 200
    "1.5L" -> 1500
    "la canette: 33cl" -> 330

    Je conçois que la conversion d'unité ne relève pas des regex :-) et je pense pouvoir m'en occuper; mais il me faudrait au moins un moyen d'isoler "33/cl" ou "1.5/L".
    Eventuellement, on peut utiliser un tableau d'unités (mg,g,kg,ml,cl,l) pour éviter de récupér "1/cs" dans le cas de "1 cs (cuillère à soupe) soit 10ml"

    Si quelqu'un a le pattern magique qui va m'aider à m'en sortir, je lui tire mon chapeau et le remercie d'avance !!

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 3
    Points
    3
    Par défaut
    Bon ben je me réponds à moi-même :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var regex = /(\d*[.,]?\d+)+\s*(mg|g|kg|ml|cl|l)/i;
    var tab = regex.exec(donnees);
    console.log(tab[1]+"/"+tab[2]);
    Pour le moment, ça a l'air de marcher... Si quelqu'un voir une faille ou une meilleure option, merci de m'en faire part !!

  3. #3
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    en PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $text = "une crêpe, 32 g
    30g
    200ml reconstitué
    1.5L
    la canette: 33cl";
     
    preg_match_all("#([0-9.]+) *([dcmhk]{0,1}[lg])#i", $text, $output, PREG_SET_ORDER);
    foreach ($output as $value) {
      echo 'quantité ' . $value[1] . ' unité : ' .$value[2] . '<br/>';
     }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 846
    Points : 6 530
    Points
    6 530
    Par défaut
    Utilises plutôt ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var regex = /(\d+(?:[.,]\d+)?)+\s*([mcdk]?[gl]?)\b/i;
    ensuite tu fais un switch sur le groupe de capture 2, pour éventuellement faire les conversions.

    ps: j'ai tout mis en optionnel pour les unités pour pouvoir gérer les quantités sans unité, genre "3 carottes pour les marmottes".
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/09/2012, 10h00
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 20h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 27/08/2007, 00h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 11h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 14h48

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