3 Stimmen

Regex zum Ersetzen mehrerer Punkte in Gleitkommazahlen

Wenn ich etwas wie dieses eingebe: a1.b22.333, möchte ich, dass es entweder ausgegeben wird:

1.22333 oder 122,333

Dabei werden die nicht-zifferigen Zeichen und alle Punkte nach 1 entfernt.

Meine besten Vermutungen dazu waren:

obj.value = obj.value.replace( /[^0-9\.{1}]+/g ,  '');     
obj.value = obj.value.replace( /[^0-9\.{2,}]+/g ,'');     
obj.value = obj.value.replace( /[^0-9\.(?=.*\.)]+/g ,'');

Aber alle diese Ausgaben 1.22.333

Wie kann ich diese zusätzliche Periode loswerden?

Vielen Dank für Ihre Hilfe.

18voto

jfriend00 Punkte 632952

Sie können das so machen:

obj.value = obj.value.replace(/[^\d\.]/g, "")
  .replace(/\./, "x")
  .replace(/\./g, "")
  .replace(/x/, ".");

Dadurch werden alle nicht numerischen Zeichen ohne Punkt entfernt, dann wird nur der erste Punkt durch "x" ersetzt, dann werden alle anderen Punkte entfernt, und dann wird "xxx" wieder durch einen Punkt ersetzt.

1voto

Björn Punkte 28353

Mischen Sie etwas String-Slicing hinzu, und es funktioniert hervorragend */

/* Remove everything but digits and dots */
var s = ".swe4.53dv3d.23v23.we".replace(/[^\d\.]/g, '');

/* Trim the string from dots */
s = s.replace(/^\.+/, '').replace(/\.+$/, '');

/* Fetch first position of dot */
var pos = s.indexOf(".");

/* Slice the string accordingly, and remove dots from last part */
s = s.slice(0, pos + 1) + s.slice(pos + 1, s.length).replace(/\./g, '');

/* s === "4.5332323" */

0voto

nnnnnn Punkte 142888

Wenn Sie eine Funktion verwenden, um die Ersetzungszeichenfolge zu bestimmen, können Sie nach allen Nicht-Ziffern suchen und dann zählen, wie viele Punkte bis dahin aufgetreten sind:

var val = "a1.b22.333",
    i = 0;

val = val.replace(/\D/g, function(m) {
   if (m===".")
      return (++i > 1) "" : ".";
   return "";
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X