6
votes

Comment utiliser RegEx pour la monnaie

J'ai besoin de prendre un prix d'un élément et de l'ajouter à un autre.

J'utilise ceci: p> xxx pré>

qui semble fonctionner pour 0.50 $ code>, $ 1.00 code>, 20,00 $ code>, 200,00 $ code> mais j'ai frappé un mur de briques sur 1 000,00 $ 10 000,00 $ p>

(improbable 10 000,00 $ 00 code> sera déjà utilisé). P>

La virgule me trébuche. P>

** Edit ** P> >

Je suis parti pendant une heure pour revenir aux tas de réponses. Avant de passer par eux, je pensais que je clarifierais plutôt que de répondre à tous les commentaires: p>

La plate-forme utilisée automatiquement génère la valeur totale des articles dans un panier d'achat. Il est rendu dans un élément - cette modification selon laquelle un utilisateur ajoute ou supprime des éléments. P>

La valeur est peu susceptible d'entrer dans 10 000,00 car les coûts de produits ne sont pas si élevés. P> Je suis nouveau à utiliser la regex, il m'a fallu assez longtemps pour que ce soit loin, d'où la question. p>

Généré automatique HTML: P>

<span vertical="False" quote="False" id="catCartSummary">
   <table cellspacing="0" class="cartSummaryTable">
     <tbody>
       <tr>
         <td class="cartSummaryItem">3 item(s), Total: $115.00 <a href="#" class="cartSummaryLink">View Cart</a></td>
       </tr>
     </tbody>
   </table>
</span>


5 commentaires

FYI REGEX fait partie de JavaScript, pas spécifiquement jQuery.


Que devrait-il arriver avec quelque chose comme 1.000,00 $ ?


Vous ne pouvez pas ajouter un coma dans votre regex?


@jbduzan: Vraisemblablement pas, sinon, je suppose qu'il ne demanderait pas comment le faire.


Vous avez deux bonnes réponses, cela dépend de ce que vous voulez, d'analyser la valeur ou de saisir la valeur.


6 Réponses :


2
votes

Ceci fonctionne pour moi: xxx

Démo

J'ai trouvé une excellente regex qui saisit toutes les devises valides et l'a personnalisée un peu à vos besoins: xxx

Démo

La source de la regex


6 commentaires

Cela correspondrait également à 0 $ ,. 0 .


OK mais correspond toujours à 0,0,0,0,0,0,0 $ cependant.


@Markbyers. Et ce n'est pas une entrée valide ??


Eh bien, il est vraiment difficile de dire de la question des intrants valides, car la question n'est pas claire. J'ai demandé à l'OP dans un commentaire à propos d'une éventuelle entrée Vaild / Invalide, mais il n'a pas répondu. Si cela va être utilisé pour quelque chose d'important, je préférerais voir des intrants ambiguës ou incertains rejetés.


@gdoron - c'est une regex intéressante. Vous avez dit que vous avez "trouvé" - avez-vous une URL?


@Justin. J'ai oublié de mentionner la source, j'ai ajouté. Merci de le pointe!



1
votes

Modifier quelque chose comme ceci:

 \$\d{1,3}(,\d{3})*(?:\.\d+)?


0 commentaires

0
votes

J'ai celui-ci:

^\d{1,3}(,\d{3})*(\.\d+)?$


3 commentaires

En fait, cette réégycle est incorrecte car elle correspond à tous les numéros, pas seulement la devise ajoutez (? <= \ €) dans la bengage


@DMitry: J'ai indiqué dans ma réponse, je ne fais pas correspondre à la monnaie. Il pourrait vouloir changer sa monnaie plus tard, et ce sera mieux s'il n'en a pas compris celui-ci avec regex.


Comme je l'asseté, Yuo Regexp Match "TOUT NUMÉRO", ce qui ne correspond pas à celui-ci uniquement partie de la devise, cela correspond par exemple "Le joueur sous le numéro 47 a été acheté pour une chaîne de 100,00 $" Même 47, ce qui n'est évidemment pas un le prix.



1
votes
var re = /^\d{1,3}(\,\d{3})*(?:\.\d+)?$/;

console.log(re.test('0.50'));
console.log(re.test('1'));
console.log(re.test('20.50'));
console.log(re.test('200.50'));
console.log(re.test('2,000'));
console.log(re.test('2,000.50'));
console.log(re.test('20,000'));
console.log(re.test('20,000.00'));
console.log(re.test('1,000,000'));
console.log(re.test('1,000,000.50'));

0 commentaires

11
votes

remplacer non-chiffre code> et non-dot code> simbols par '' ' code>, puis appliquez parsefloat code>:

var currenciesAsNumbers = currencies.map( function(item){
    return parseFloat( item.replace(/[^\d\.]/g,'') );
});    // [115]


5 commentaires

C'est en fait la meilleure réponse. Si vous devez ajouter les prix, vous feriez mieux de convertir en chiffres réels, puis de reformater.


Il a écrit qu'il avait besoin de prendre la valeur d'un élément à un autre, je ne suis pas sûr de pouvoir analyser la valeur.


Cela convertit un dollar en une valeur numérique. Ceci est certainement utile de savoir comment faire. Cependant, cela ne l'aidera pas à trouver le montant du dollar en premier lieu.


@gdoron, ce n'est pas évident, quel op contre "l'ajout à une autre phrase". Votre réponse attrape la valeur, ma réponse convertit la devise en nombre pour effectuer des mathématiques sur celui-ci (spécifiquement "Ajouter").


@Engineer - Cela a parfaitement travaillé pour ce que je faisais, merci.



1
votes

Striming Out $ Symbole de devise ainsi que la virgule peut être facilement atteint avec cette regex en utilisant Remplacer: [^ 0-9]

Démo disponible ici: http://rubular.com/r/gwkx62rtla


0 commentaires