Maison  >  Article  >  développement back-end  >  Comment analyser des chaînes de devises en PHP avec plusieurs paramètres régionaux ?

Comment analyser des chaînes de devises en PHP avec plusieurs paramètres régionaux ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-13 03:13:02898parcourir

How to Parse Currency Strings in PHP with Multiple Locales?

Analyse des chaînes de devises en PHP

Lors de l'analyse des chaînes de devises en PHP, il peut être difficile de gérer différents séparateurs décimaux en fonction des paramètres régionaux actuels. . Bien que l'utilisation de str_replace() pour convertir des virgules en points puisse fonctionner dans certains cas, elle repose sur l'hypothèse que le séparateur décimal est toujours un point.

Une solution plus robuste

Pour remédier à cette limitation et répondre à plusieurs paramètres régionaux, une solution plus complexe mais polyvalente consiste à utiliser des expressions régulières (regex). Voici comment procéder :

public function getAmount($money)
{
    $cleanString = preg_replace('/([^0-9\.,])/i', '', $money);
    $onlyNumbersString = preg_replace('/([^0-9])/i', '', $money);

    $separatorsCountToBeErased = strlen($cleanString) - strlen($onlyNumbersString) - 1;

    $stringWithCommaOrDot = preg_replace('/([,\.])/', '', $cleanString, $separatorsCountToBeErased);
    $removedThousandSeparator = preg_replace('/(\.|,)(?=[0-9]{3,}$)/', '',  $stringWithCommaOrDot);

    return (float) str_replace(',', '.', $removedThousandSeparator);
}

Explication

  • preg_replace() supprime les caractères non numériques et isole le séparateur décimal.
  • Le nombre de séparateurs est déterminé pour les supprimer un à la fois jusqu'à ce que seul le séparateur décimal reste.
  • La chaîne est ensuite nettoyée pour supprimer des milliers de séparateurs, et enfin, une valeur flottante avec le séparateur décimal correct est renvoyée.

Mises en garde

  • Cette méthode échoue si la partie décimale dépasse deux chiffres.
  • Si vous traitez avec de tels scénarios, envisagez d'utiliser une bibliothèque comme money-detector (https://github.com/mcuadros/currency-detector) pour une gestion plus complète.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn