2017-06-23 3 views
-1

Ich habe eine Zeichenfolge, die eine Währung mit Text enthält. Ich sollte die Währung in einem Float-Format erhalten.Regulärer Ausdruck Währungsformat

Beispiele auf, wie die Umwandlung

Cash € 1,00   => 1.00 
Cash € 10,00   => 10.00 
Cash $ 10.00   => 10.00 
Maestro € 1,0000  => 1.0000 
Visa € 1.000,00  => 1000.00 
Cash € 1.000.000,00 => 1000000.00 
Cash $ 1,000,000.00 => 1000000.00 

Vorerst arbeiten soll ich tun es in 2 Schritten. Der erste Ausdruck filtert nur 0-9. und ,

var regex = /(\d|\.|,)/g 
value = value.match(regex).join(''); 

ich mit meinem zweiten regex bin zu kämpfen

var regex2 = /(\.|,)(?=.*(\.|,))/g; 

Dies jeden Punkt oder Komma mit Ausnahme der letzten übereinstimmt.

Wie kann ich diese zweite Regex verwenden, um die Umkehrung zu tun? Anstatt also die . und , zu vergleichen, passen Sie alle anderen außer denen an.

+0

Von was ich verstanden habe, müssen Sie nur schreiben: '/ ([0-9] +)/g' ... –

+0

Mit diesem Ausdruck verliere ich mein Komma – justijn

+0

Ihre Strings ist alles in diesem Format? –

Antwort

0

Allright ich nahm einen etwas anderen Ansatz dazu.

Ich denke, einige Leute in den Kommentaren haben mich missverstanden, Die Strings, die ich erhalte, können entweder in amerikanischer Notation oder in europäischer Notation geschrieben sein. Beispiel:

American: 1,345.20 = European 1.345,20 

die , und . kann

Ich nehme alle Zahlengruppen sowohl als Tausendertrennzeichen oder Dezimalzeichen verwendet werden, und dann kommen sie mit Ausnahme des letzten. Dann lege ich einen Punkt dazwischen und füge den letzten hinzu.

var regex = /([0-9]+)/g; 
var arrValues = value.match(regex); 
if(arrValues.length == 1) value.push(0); 
var newValue = parseFloat(_.initial(arrValues).join('') + '.' + _.last(arrValues)); 

Die if-Anweisung ist eine Zahl ohne , oder . zu verhindern, umgewandelt in 0.value wie 10 => 0.10

Nebenbei bemerkt werden: i lodash verwenden, um einige Sachen zu tun.