2009-04-20 14 views
0

Freunde,Reguläre Ausdrücke mit Javascript ersetzen Methode

Ich bin neu sowohl Javascript und Regular Expressions und hoffe, Sie können helfen!

Innerhalb einer Javascript-Funktion muss ich überprüfen, ob ein Komma (,) erscheint 1 oder mehrmals. Wenn dies der Fall ist, sollte es eine oder mehrere Zahlen auf jeder Seite geben.

z.B.

1.000,00 ist ok

1.000,00 ok ist

, 000,00

1, nicht in Ordnung ist, 000.00 ist nicht ok

Wenn diese Bedingungen erfüllt sind, ich das Komma wollen so entfernt werden 1000,00 wird 1000,00

Was ich versucht habe, ist so:

var x = '1.000,00';

var Regex = neue RegExp ("[0-9] +, [0-9] +", "g");

var y = x.replace (Regex, "");

Warnung (y);

Wenn ausgeführt, zeigt die Warnung ".00" Was ist nicht das, was ich erwartet habe oder wollen!

Vielen Dank im Voraus für jede Hilfe zur Verfügung gestellt.

starker Text bearbeiten starker Text

Dank alle für die Eingabe so weit und die 3 Antworten gegeben. Leider glaube ich nicht, dass ich meine Frage gut genug erklärt habe.

Was ich versuche zu erreichen ist:

Wenn ein Komma im Text ist, und es gibt eine oder mehrere Zahlen auf beiden Seiten der es dann das Komma entfernen, aber den Rest des Strings lassen wie es ist.

Wenn ein Komma im Text vorhanden ist und es nicht mindestens eine Zahl auf beiden Seiten gibt, dann tun Sie nichts. So oben

von meinen Beispielen:

1.000,00 wird 1000,00

1,000,00 wird 100000

ist 000,00 links, 000,00

1, wird 000,00 links als 1 ,, 000.00

Entschuldigung für die Verwirrung!

+0

Was mit nur Entfernen falsch ist alles Kommas innerhalb der Zeichenfolge ... Eg String.replace (',', ''); – James

+0

Danke für den Kommentar Jimmy. Das war meine erste Lösung! Leider erlauben einige der Felder das Einfügen von Kommas als Teil der Formatierung. Bevor ich also den Benutzer das Feld verlassen lasse und ein Komma eingegeben habe, muss es mindestens eine Nummer auf beiden Seiten geben. Im Grunde genommen, um es zu stoppen Benutzer Eingabe 1 ,,,,,,,,,,,,,,,, 000 usw. –

Antwort

4

Ihre Regex wird nicht sehr flexibel mit höheren Bestellungen als 1000 und es hat ein Problem mit Eingaben, die nicht das Komma haben.Problematischer ist es auch, dass Sie den Teil der Daten, der Sie interessiert, ergänzen und ersetzen!

Besser einen regulären Ausdruck haben, die die Formulare Spiele, die ein Problem sind und entfernen.

Die folgenden (in der Reihenfolge) Kommas stehen am Anfang der Eingabe, am Ende der Eingabe, gefolgt von einer Anzahl von Nicht-Ziffern oder gefolgt von einer Anzahl von Nicht-Ziffern.

var y = x.replace(/^,|,$|[^0-9]+,|,[^0-9]+/g,''); 

Als beiseite, all dies ist viel einfacher, wenn Sie in der Lage sein passieren lookbehind zu tun, aber fast JS jede Implementierung nicht.

bearbeitet basierend auf Frage Update:

Ok, ich werde versuchen, nicht zu verstehen, warum Ihre Regeln sind wie sie sind, aber der Regex wird einfacher, es zu lösen:

var y = x.replace(/(\d),(\d)/g, '$1$2'); 
+3

Sie können einen Lookbehind simulieren, indem die Zeichenfolge Wende- und ein Look-Ahead tun ... – James

+0

Sicher, guten Punkt, aber die OP müsste Lookahead und zurück machen. Du könntest es benchmarken, wenn es wichtig ist, aber ich denke, dass mehrere Operationen klumpiger als die obige Regel sind. – annakata

+0

Hallo annakata, Danke für die Lösungen - die zweite war genau das, was ich brauchte. Danke nochmal! Mit freundlichen Grüßen Ian –

2

I so etwas wie die folgenden verwenden würde:

^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)$ 
  • [0-9] {1,3}: 1 bis 3-stellige s
  • ([0-9] {3}) *: [Optional] Weitere digit Drillinge durch ein Komma getrennt
  • (\ [0-9] +.): [Optional] Dot + mehr Ziffern

Wenn diese Regex passt, wissen Sie, dass Ihre Nummer gültig ist. Ersetzen Sie einfach alle Kommas durch die leere Zeichenfolge.

+0

Schöne Antwort, beginnen Sie mit der Überprüfung der Richtigkeit Ihrer Nummer. Sobald dies erledigt ist, müssen Sie nur jedes Komma entfernen ... –

1

Es scheint mir, haben Sie drei Fehlerbedingungen

  1. “, 1000"
  2. "1000"
  3. "1 000"

Wenn einer von ihnen ist wahr, dann sollten Sie das Feld ablehnen, Wenn sie alle falsch sind, dann können Sie die Kommas auf die normale Weise entfernen und weitermachen. Dies kann ein einfacher Wechsel sein:

^,|,,|,$ 
+0

sehr intelligente Lösung – dfa

1

würde ich nur etwas außer Ziffern entfernen und Dezimaltrennzeichen ([^0-9.]) und die Ausgabe durch parseFloat() senden:

var y = parseFloat(x.replace(/[^0-9.]+/g, "")); 
1
// invalid cases: 
// - standalone comma at the beginning of the string 
// - comma next to another comma 
// - standalone comma at the end of the string 
var i, 
    inputs = ['1,000.00', '1,000,00', ',000.00', '1,,000.00'], 
    invalid_cases = /(^,)|(,,)|(,$)/; 
for (i = 0; i < inputs.length; i++) { 
    if (inputs[i].match(invalid_cases) === null) { 
     // wipe out everything but decimal and dot 
     inputs[i] = inputs[i].replace(/[^\d.]+/g, ''); 
    } 
} 
console.log(inputs); // ["1000.00", "100000", ",000.00", "1,,000.00"]