2016-05-10 6 views
1

Ich habe eine Benutzereingabe, wo Benutzer Preis von etwas bearbeiten können. Um Daten zu erhalten, möchte ich mit dieser Zeichenfolge auf der Front-End-Site arbeiten.Regex, um nicht dezimale Zahl dezimal zu machen (add. 00)

Was ich tun möchte, ist:

1234 to 1234.00 
12.3 to 12.30 
12,3 to 12.30 
1234.45 to 1234.45 

Also im Grunde,

  1. Komma Ersetzen mit Punkten dies sollte wie mit somehing leicht geschehen:

    str.replace(',', '.'); 
    
  2. Fügen Sie Punkte hinzu, wenn Zahl, wenn nicht Dezimal, und ändern Sie immer auch die Anzahl der Ziffern auf zwei (so 0 hinzufügen, wenn erforderlich) ich versuche, wie etwas zu tun:

    priceByUser = priceByUser.replace(/^\d*\.?\d*$/, "$1\.00"); 
    

leider wirklich dieses nicht selbst arbeiten, wie ich erwartet hatte.

Gibt es eine Chance, dass jemand mir helfen kann, dieses Problem zu lösen? Dank

+1

Sind Sie sicher '123,45 bis 1234.45'? –

+0

Hallo @ WiktorStribiżew, danke für diesen Punkt. Du hast recht, ich will nicht, sorry dafür, dass es ein Tippfehler war. Schon in Frage geändert. – Andurit

+0

Dies mag eine faule Lösung sein, aber Sie könnten einfach 0,00 zu jeder Zahl hinzufügen, die Sie mit '[0-9] +' finden. * Nach *, dass Sie nach Zahlen mit zwei Vorkommen von Dezimaltrennzeichen suchen können - '[0-9] + (\. |,) [0-9] + \. 00' - und entfernen Sie die letzten drei Zeichen. – Renan

Antwort

4

Sie in Erwägung ziehen könnte einen regulären Ausdruck mit Ihrem Kommas und Punkte mit nur Dezimalstellen zu ersetzen und dann die Werte als Schwimmer über parseFloat() analysieren dann schließlich, verwenden Sie die toFixed(2) Funktion, um anzuzeigen, dass Sie zwei Dezimalstellen wollen:

// This will clean up your input (consolidating periods and commas), parse the result 
// as a floating point number and then format that number to two decimal places 
priceByUser = parseFloat(priceByUser.replace(/,/g,'.')).toFixed(2); 

Wenn Sie eine zusätzliche Ebene der Validierung wollten, könnten Sie nicht einstelligen oder Dezimalstellen Strippen prüfen, nachdem dies der Fall ist:

// Sanitize 
priceByUser = priceByUser.replace(/,/g,'.').replace(/[^\d\.]/g,''); 
// Parse and format 
priceByUser = Number(priceByUser).toFixed(2); 

Beispiel

Sie können see a working example here und und Beispiel für Eingabe/Ausgabe unter:

enter image description here

+0

'originalValue.replace (/,/g, '.')' Ist ausreichend. – sweaver2112

+0

Ich mag es, dass Sie string säubern, aber es ist nicht genug. Immer noch keine guten Ergebnisse mit "...", "3.3." etc. –

+0

Eingabe-Validierung ist außerhalb des Geltungsbereichs – sweaver2112

Verwandte Themen