Sujet : Aide pour une expression régulière

Hey,

J'ai besoin d'extraire une valeur d'une chaine mais je galère un peu.

Voici la source récupérer via Stream et File

{lhs: "0.74 Euros",rhs: "1.111036 U.S. dollars",error: "",icc: true}

Le json est pas valide, donc je le reformate et je récupère rhs

$result = preg_replace("/([a-zA-Z0-9_]+?):/" , "\"$1\":", $content->readAll());
$result = json_decode($result);

Ce qui me donne

après  réécriture:  {"lhs": "0.74 Euros","rhs": "1.111036 U.S. dollars","error": "","icc": "true"}
valeur de rhs: 1.111036 U.S. dollars

Pour le moment tout se passe bien.
Je vire la devise via le séparateur (espace) pour obtenir que le nombre seul

$tmp = explode(' ', $result->rhs);

Ce qui me donne

1.111036 avec $tmp[0]

Mais petit problème:

Je ne peux pas découper via les espaces car le séparateur de millier est un espace pour certaines devises.
exemple: 12 458.50 U.S. dollars

J'ai essayé de faire une petite expression pour récupérer les nombres et séparateur mais il me récupère les . de U.S. dollars
Entant pas encore assez amoureux des regex, je galère un peu.

Quelqu'un pourrait me donner un petit coup de main ?

Merci d'avance

Dernière fois dit par tetardo (22 Oct. 2009 17:21)

Le code c'est comme le paic citron, quand il y en a plus... il y en a encore !

2

Re : Aide pour une expression régulière

Hey smile,

Tu as pensé à http://php.net/number_format (ou regarder dans les exemples donnés par les utilisateurs) ?
Avant de penser aux expressions régulières, on va voir si PHP ne sait pas déjà le faire wink.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

3

Re : Aide pour une expression régulière

Oui j'ai regardé, il ne vire pas la devise. il formate les séparateur de millier et decimal

Le code c'est comme le paic citron, quand il y en a plus... il y en a encore !

4

Re : Aide pour une expression régulière

Voila le code entier pour info:

<?php

/**
 * Hoa_Framework
 */
require_once 'Framework.php';

/**
 * Hoathis_Convertor_Format_Abstract
 */
importModule('Convertor.Format.Abstract');

/**
 * Hoa_Stream_Context
 */
import('Stream.Context');

/**
 * Hoa_File
 */
import('File.~');

/**
 * Class Hoathis_Convertor_Format_Currency
 *
 * Extending the Hoathis_Convertor_Format_Abstract class.
 *
 * @author      Gregory DARCHE <tetardo@gmail.com>
 * @copyright   Copyright (c) 2009 Gregory DARCHE.
 * @license     http://gnu.org/licenses/gpl.txt GNU GPL
 * @since       PHP 5
 * @version     0.1
 * @package     Hoathis_Convertor
 * @subpackage  Hoathis_Convertor_Format
 */
Class Hoathis_Convertor_Format_Currency extends Hoathis_Convertor_Format_Abstract {

    protected $units = array(
        'AED'    => null,
        'ANG'     => null,
        'ARS'     => null,
        'AUD'     => null,
        'BGN'     => null,
        'BHD'    => null,
        'BND'     => null,
        'BOB'     => null,
        'BRL'     => null,
        'BWP'     => null,
        'CAD'     => null,
        'CHF'     => null,
        'CLP'     => null,
        'CNY'     => null,
        'COP'     => null,
        'CZK'     => null,
        'DKK'     => null,
        'EEK'     => null,
        'EGP'     => null,
        'EUR'     => null,
        'FJD'     => null,
        'GBP'     => null,
        'HKD'     => null,
        'HNL'     => null,
        'HRK'     => null,
        'HUF'     => null,
        'IDR'     => null,
        'ILS'     => null,
        'INR'     => null,
        'ISK'     => null,
        'JPY'     => null,
        'KRW'     => null,
        'KWD'     => null,
        'KZT'     => null,
        'LKR'     => null,
        'LTL'     => null,
        'MAD'     => null,
        'MUR'     => null,
        'MXN'     => null,
        'MYR'     => null,
        'NOK'     => null,
        'NPR'     => null,
        'NZD'     => null,
        'OMR'     => null,
        'PEN'     => null,
        'PHP'     => null,
        'PKR'     => null,
        'PLN'     => null,
        'QAR'     => null,
        'RON'     => null,
        'RSD'     => null,
        'RUB'     => null,
        'SAR'     => null,
        'SEK'     => null,
        'SGD'     => null,
        'SIT'     => null,
        'SKK'     => null,
        'THB'     => null,
        'TRY'     => null,
        'TTD'     => null,
        'TWD'     => null,
        'UAH'     => null,
        'USD'     => null,
        'VEB'     => null,
        'ZAR'     => null
    );

    protected $filters = array(
        'Pourcent',
        'Round',
        'Number',
        'Unit'
    );

    Const GOOGLE_URL = "http://www.google.com/ig/calculator?hl=en&q=%d%s=?%s";

    protected function convert( $value, $from, $to ) {

        Hoa_Stream_Context::getInstance('google', 'http')->addOptions(array(
            'timeout' => 30
        ));

        try {

            $content = new Hoa_File(
                sprintf(self::GOOGLE_URL, $value, $from, $to),
                Hoa_File::MODE_READ,
                'google'
            );
        }
        catch ( Hoa_File_Exception $e ) {

            throw new Hoa_Convertor_Exception(
                $e->getFormattedMessage(),
                $e->getCode()
            );
        }
        
        $result = preg_replace("/([a-zA-Z0-9_]+?):/" , "\"$1\":", $content->readAll());
        $result = json_decode($result);

        $tmp = explode(' ', $result->rhs);
        return $tmp[0];
    }
}
Le code c'est comme le paic citron, quand il y en a plus... il y en a encore !

5

Re : Aide pour une expression régulière

Hey !

Problème réglé, merci ^^

Le code c'est comme le paic citron, quand il y en a plus... il y en a encore !