417 Stimmen

Regex nur für Zahlen

Ich habe noch nie reguläre Ausdrücke verwendet, daher habe ich Schwierigkeiten bei der Fehlersuche. Ich möchte, dass der reguläre Ausdruck nur dann übereinstimmt, wenn die enthaltene Zeichenkette nur aus Zahlen besteht, aber bei den beiden Beispielen unten wird eine Zeichenkette gefunden, die alle Zahlen plus ein Gleichheitszeichen wie "1234=4321" enthält. Ich bin sicher, es gibt eine Möglichkeit, dieses Verhalten zu ändern, aber wie gesagt, ich habe noch nie viel mit regulären Ausdrücken gemacht.

string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");

if (regex.IsMatch(compare))
{ 
    //true
}

regex = new Regex("[0-9]");

if (regex.IsMatch(compare))
{ 
    //true
}

Falls es von Bedeutung ist, ich verwende C# und .NET2.0.

619voto

Bill the Lizard Punkte 384619

Verwenden Sie die Anfangs- und Endanker.

Regex regex = new Regex(@"^\d$");

Verwenden Sie "^\d+$" wenn Sie mehr als eine Ziffer abgleichen müssen.


Beachten Sie, dass "\d" wird übereinstimmen [0-9] und andere Ziffern wie die ostarabischen Ziffern . Verwenden Sie "^[0-9]+$" um die Treffer auf die arabischen Ziffern 0 - 9 zu beschränken.


Wenn Sie andere numerische Darstellungen als nur Ziffern (z. B. Dezimalwerte für den Anfang) einbeziehen müssen, siehe @tchrist 's umfassender Leitfaden für die Analyse von Zahlen mit regulären Ausdrücken .

138voto

Robert Gamble Punkte 101657

Ihre Regex passt auf alles, was eine Zahl enthält. Sie möchten Anker verwenden, um die gesamte Zeichenkette abzugleichen und dann eine oder mehrere Zahlen abzugleichen:

regex = new Regex("^[0-9]+$");

En ^ verankert den Anfang der Zeichenkette, die $ wird das Ende der Zeichenkette verankert, und die + stimmt mit einem oder mehreren der vorangehenden Begriffe überein (in diesem Fall eine Zahl).

57voto

Andrew Chaa Punkte 5562

Wenn Sie den Dezimalpunkt und die Tausendermarkierung tolerieren müssen

var regex = new Regex(@"^-?[0-9][0-9,\.]+$");

Sie benötigen ein "-", wenn die Zahl negativ werden kann.

25voto

ultraklon Punkte 560

Dies funktioniert mit ganzen Zahlen und Dezimalzahlen. Es passt nicht, wenn die Zahl das Komma-Tausend-Trennzeichen hat,

"^-?\\d*(\\.\\d+)?$"

einige Zeichenketten, die mit diesem übereinstimmen:

894
923.21
76876876
.32
-894
-923.21
-76876876
-.32

einige Strings, die das nicht tun:

hello
9bye
hello9bye
888,323
5,434.3
-8,336.09
87078.

21voto

kasperjj Punkte 3574

Es passt, weil es "eine Übereinstimmung" und nicht eine Übereinstimmung mit der vollständigen Zeichenfolge findet. Sie können dies beheben, indem Sie Ihre Regexp so ändern, dass sie speziell nach dem Anfang und dem Ende der Zeichenfolge sucht.

^\d+$

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