Obtenez le symbole de la monnaie en PHP
Nous allons commencer avec un simple morceau de code pour le format de l'argent avec NumberFormatter
:
$formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency(123456789, 'JPY');
Cette affiche: ¥123,456,789
.
C'est ok si vous voulez le format de l'argent.
Mais ce que je veux faire est d'obtenir le symbole de la monnaie (par exemple,¥) pour une devise donnée code ISO 4217 (par exemple JPY).
Ma première supposition est d'essayer en utilisant:
$formatter->getSymbol(NumberFormatter::CURRENCY_SYMBOL);
Mais qui donne le symbole de la monnaie pour les paramètres régionaux donné dans le constructeur (en_US), $ dans mon cas.
Est-il un moyen pour obtenir le symbole de devise par devise ISO 4217 code en PHP?
- Le problème est que le symbole de la devise peut apparaître soit avant ou après le numéro. De quoi êtes-vous en utilisant le symbole?
- Il suffit de faire une regex pour tout ce qui n'est pas un chiffre ou une virgule. Quelque chose comme
/[^0-9,]*/
. - Certains des symboles sera multi-octets, donc une simple chaîne de caractères de recherche ne fonctionne pas très bien.
- Je veux éviter de regex. En fait, j'ai voulu la corriger github.com/symfony/symfony/blob/master/src/Symfony/Component/... et de se débarrasser de cette regex, j'ai pensé PHP prend en charge cette. Merci quand même.
- Les plus utiles liées ressource que j'ai trouvé ceci (oui, c'est du python, mais toutes ces fonctions sont disponibles en PHP), ce qui est un peu une mauvaise "solution". La racine du problème, c'est que cette fonctionnalité dépend du système d'exploitation hôte avoir les informations sur les paramètres régionaux disponibles, mais en même temps je ne vois pas de raison pour que cela n'est pas possible à l'intérieur de ces restrictions.
- J'ai essayé et
currency_symbol
et la plupart des autres données est vide pour une raison quelconque. Merci.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, il n'est pas international de la monnaie mondiale de la table des symboles, que n'importe qui sur la planète capable de lire et de comprendre.
Dans chaque région/pays de la monnaie de symboles diffèrent, c'est pourquoi vous devez déterminer sur la base de la qui est de la lecture, à l'aide du navigateur /paramètres régionaux de l'utilisateur.
La manière correcte est comme vous l'avez deviné, à l'aide de NumberFormatter::SYMBOLES, mais vous devez d'abord définir les paramètres régionaux comme fr-fr@devise=JPY:
De cette façon, le symbole sera compréhensible par l'utilisateur.
Par exemple, le symbole $seront:
locale
basé sur la monnaieiso
. Quelque chose commerlocaleconv(int_curr_symbol, 'JPY')
ou pas!Je l'ai réalisé à l'aide de cette https://github.com/symfony/Intl:
retourne
Si vous définissez les paramètres régionaux à l'aide de cette fonction
setlocale("LC_ALL", "es_AR");
Vous pouvez utiliser
localeconv()['currency_symbol']
oulocaleconv()['int_curr_symbol']
pour obtenir les paramètres régionaux du symbole de la monnaie et de l'international de la variation de la devise symbole.Depuis les symboles peuvent être multi-octets, j'ai utilisé mb_*() fonctionne correctement, prenez la non-ponctuation et non chiffres, caractères qui serait, laisse le symbole.
Cryptique a une bonne réponse, mais il y a un moyen plus simple de le faire:
C'est un simple et agréable, inline solution qui ne nécessite pas de déclarer une autre fonction, mais par contre, elle ne gère pas correctement tous les cas - c'est à dire les monnaies où les lettres sont une partie de la sortie. Mais pour distinguer par exemple $ et £, il fonctionne très bien.
Vous donnera un tableau associatif de 3 lettre les codes des monnaies à leur symbole.
Pouvez ensuite utiliser comme ceci:
Essayez cette variante: