Reguläre Javascript-Ausdrücke - Ersetzen Sie nicht numerische Zeichen

71

Das funktioniert:

var.replace(/[^0-9]+/g, '');  

Dieses einfache Snippet ersetzt alles, was keine Zahl ist, durch nichts.

Aber Dezimalstellen sind auch real. Also versuche ich herauszufinden, wie man einen Punkt einschließt.

Ich bin sicher, dass es wirklich einfach ist, aber meine Tests funktionieren nicht.

Kaffeemonitor
quelle
Suchen Sie eine einzelne Nummer oder mehrere Nummern? Dh für "12.3 a b5" möchten Sie "12.3 5" oder "12.35" zurückgeben, oder ist diese Eingabezeichenfolge nicht einmal möglich?
Tloflin

Antworten:

105

Bist du der Zeit entkommen? var.replace(/[^0-9\.]+/g, '');

Jacob Mattison
quelle
3
Es ist unnötig, der Zeit zu entkommen, glaube ich.
Lane
8

Das Ersetzen von etwas, das keine Zahl ist, ist etwas schwieriger als das Ersetzen von etwas, das eine Zahl ist.

Diejenigen, die vorschlagen, einfach den Punkt hinzuzufügen, ignorieren die Tatsache, dass. wird auch als Punkt verwendet, also:

This is a test. 0.9, 1, 2, 3wird werden .0.9123.

Die spezifische Regex in Ihrem Problem hängt stark vom Zweck ab. Wenn Sie nur eine einzige Zahl in Ihrer Zeichenfolge haben, können Sie dies tun:

var.replace(/.*?(([0-9]*\.)?[0-9]+).*/g, "$1")

Dadurch wird die erste Nummer gefunden und die gesamte Zeichenfolge durch die übereinstimmende Nummer ersetzt.

Jeff B.
quelle
5

Versuche dies:

var.replace(/[^0-9\\.]+/g, '');
Levi Hackwith
quelle
2

Versuche dies:

var.replace(/[0-9]*\.?[0-9]+/g, '');

Das stimmt nur mit gültigen Dezimalstellen überein (z. B. "1", "1.0", ".5", aber nicht "1.0.22")

Eric
quelle
1
Tatsächlich entspricht dies B.006 oder blah123. Er sucht nach dem negativen Fall.
Jeff B
2

Wenn Sie die IP-Adresse nicht zusammen mit den Dezimalstellen abfangen möchten:

var.replace(/[^0-9]+\\.?[0-9]*/g, '');

Was nur Ziffern mit einer oder null Perioden fängt

dkinzer
quelle
Das ist falsch. Dies entspricht Nicht-Zahlen, gefolgt von einem möglichen Zeitraum, gefolgt von Zahlen. Das Poster möchte alle NON-Nummern durch nichts ersetzen.
Jeff B
Vielen Dank. Ich habe die Frage falsch verstanden.
Dkinzer
Obwohl ich denke, dass dies bedeutet, dass alles übereinstimmt, was mit einer oder mehreren Zahlen beginnt, gefolgt von 0 oder 1 Punkt, gefolgt von 0 oder mehreren Zahlen.
Dkinzer
1

Es gibt bereits viele richtige Antworten, die nur darauf hinweisen, dass Sie möglicherweise auch negative Vorzeichen berücksichtigen müssen. "\-"Fügen Sie dies zu jeder vorhandenen Antwort hinzu, um negative Zahlen zu berücksichtigen .

gm77
quelle
0

Wie wäre es damit:

var numbers = str.gsub(/[0-9]*\.?[0-9]+/, "#{0} ");
Eric
quelle
0

Süßes und kurzes Inline-Ersetzen nicht numerischer Zeichen im ASP.Net-Textfeld:

 <asp:TextBox ID="txtJobNo" runat="server" class="TextBoxStyle" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" />

Ändern Sie den Regex-Teil nach Ihren Wünschen. Viele, viele Leute beschweren sich darüber, dass der Cursor bei Verwendung der Pfeiltasten direkt zum Ende geht, aber die Leute neigen dazu, damit umzugehen, ohne es zu bemerken, zum Beispiel Pfeil ... Pfeil ... Pfeil ... okay dann ... Rücktaste Rücktaste, geben Sie die neuen Zeichen ein.

Pierre
quelle
0

Hier sind einige von mir verwendete jQuery-Eingabeklassentypen:

$("input.intgr").keyup(function (e) { // Filter non-digits from input value.
    if (/\D/g.test($(this).val())) $(this).val($(this).val().replace(/\D/g, ''));
});
$("input.nmbr").keyup(function (e) { // Filter non-numeric from input value.
    var tVal=$(this).val();
    if (tVal!="" && isNaN(tVal)){
        tVal=(tVal.substr(0,1).replace(/[^0-9\.\-]/, '')+tVal.substr(1).replace(/[^0-9\.]/, ''));
        var raVal=tVal.split(".")
        if(raVal.length>2)
            tVal=raVal[0]+"."+raVal.slice(1).join("");
        $(this).val(tVal);
    } 
});

intgr erlaubt hier nur numerische - wie andere Lösungen.

nmbr erlaubt nur positive / negative Dezimalstellen. Negative muss das erste Zeichen (man kann „+“ , um den Filter hinzufügen , wenn Sie es brauchen), Streifen -3.6.23.333zu-3.623333

Ich stelle nmbr auf, weil ich es satt habe, den Weg zu finden, nur 1 Dezimalstelle und ein Negativ auf der 1. Position zu halten

Gordon
quelle
0

Dieser hat nur für -ve bis + ve Zahlen funktioniert

<input type="text" oninput="this.value = this.value.replace(/[^0-9\-]+/g, '').replace(/(\..*)\./g, '$1');">

Herr Adrien Feudjio
quelle