2016-12-17 2 views
1

Für eine Währungseingabe möchte ich alle Minus-Eingabe ersetzen, die nicht am Anfang der Zeichenfolge oder, wenn es das letzte Zeichen ist, ist kein Komma vorangestellt.JavaScript RegEx: alle Minuswerte, die nicht am Anfang oder Ende der Zeichenfolge für die Währungseingabe sind

Im Eingangsereignis Ich rufe bereits für einige andere ungültige Eingabe mit einem einfachen regulären Ausdruck ersetzen:

 input.replace(/[^0-9\.\,\-]/g, '') 
      .replace('.', ','); 

Es wäre toll, wenn ich diese Regex auch die ungültigen minusen verlängern könnte abzuzustreifen.

Einige Beispiele für das gewünschte Verhalten:

  • 50-50 ->5050
  • 50,00- ->50,00
  • -5-0,- ->-50,-

Edit: Doppel minus am Ende oder Anfang sollte auch abgestreift werden.

  • --50,00 ->-50,00
  • 50,-- ->50,-

Ich dachte, ich mit einem positiven Look-Ahead beginnen konnte -(?=.), aber das passt immer noch das erste Zeichen.

Zusätzlich fand ich this post, dass ziemlich genau das Gegenteil tut (Minus sind nicht erlaubt am Anfang und Ende), aber das würde immer noch die ganze Zeichenfolge übereinstimmen. Nicht die Sepatate Minuspunkte.

Jede Hilfe wäre willkommen.

Antwort

0

Verwenden Sie den folgenden Ansatz mit spezifischen RegexMuster:

var replaceHyphen = function (str) { 
 
    return str.replace(/(\d)-|(-)-/g, '$1$2'); 
 
}; 
 
    
 
console.log(replaceHyphen('50-50')); 
 
console.log(replaceHyphen('50,00-')); 
 
console.log(replaceHyphen('-5-0,-')); 
 
console.log(replaceHyphen('--50,00')); 
 
console.log(replaceHyphen('50,--'));

+0

Das sieht vielversprechend aus, aber es würde immer noch ein doppeltes Minus am Anfang und am Ende zulassen. Vielleicht war mir das nicht klar. Die Frage wurde aktualisiert. – ndoes

+0

eigentlich, ja, deine Frage war nicht klar genug wie für doppelte Bindestriche. Jetzt überprüfe mein Update, es funktioniert auch für doppelte Bindestriche – RomanPerekhrest

+0

Excellent. Vielen Dank. – ndoes

0

Ist eine Funktion in Ordnung? Dies sollte den Trick:

function removeMinus(str) { 
    var prefix = str.startsWith("-") ? "-" : ""; 
    var postfix = str.endsWith(",-") ? "-" : ""; 
    return prefix + str.split("-").join("") + postfix 
} 
+0

Dies wird nicht in IE arbeiten. Nur damit du es weißt. – putvande

0

Sie könnten Wortgrenze verwenden \b, das zu tun.

RegExp Boundaries

\b

Spiele eine Wortgrenze. Dies ist die Position, an der einem Wortzeichen kein anderes Wortzeichen folgt, zB zwischen einem Buchstaben und einem Leerzeichen.

https://regex101.com/r/YzCiEx/1

var regex = /\b-+\b/g; 
 

 
console.log("50-50".replace(regex, '')) 
 
console.log("50,00".replace(regex, '')) 
 
console.log("-5-0,-".replace(regex, '')) 
 
console.log("-5------6-".replace(regex, '')) 
 
console.log("-6--66-6,-".replace(regex, ''))

+0

Informativ, aber dies würde immer noch ein Minus am Ende nicht durch ein Komma und Doppel Bindestrich am Anfang oder Ende vorausgehen. Vielleicht kann ich das als Anfang benutzen. Vielen Dank. – ndoes

Verwandte Themen