941 Stimmen

Erkennen, ob eine Zeichenkette eine Zahl ist

Wenn ich diese Saiten habe:

  1. "abc" = false

  2. "123" = true

  3. "ab2" = false

Gibt es einen Befehl, wie IsNumeric() oder etwas anderes, das erkennen kann, ob eine Zeichenkette eine gültige Zahl ist?

1516voto

mqp Punkte 66863
int n;
bool isNumeric = int.TryParse("123", out n);

Update Ab C# 7:

var isNumeric = int.TryParse("123", out int n);

oder wenn Sie die Nummer nicht brauchen, können Sie verwerfen der Ausgangsparameter

var isNumeric = int.TryParse("123", out _);

El var s können durch ihre jeweiligen Typen ersetzt werden!

395voto

John M Gant Punkte 18412

Dies gibt true zurück, wenn input sind alle Zahlen. Ich weiß nicht, ob es besser ist als TryParse aber es wird funktionieren.

Regex.IsMatch(input, @"^\d+$")

Wenn Sie nur wissen wollen, ob eine oder mehrere Zahlen mit Buchstaben vermischt sind, lassen Sie die ^ + y $ .

Regex.IsMatch(input, @"\d")

Editar: Eigentlich denke ich, es ist besser als TryParse, weil eine sehr lange Zeichenfolge potenziell TryParse überlaufen könnte.

301voto

Kunal Goel Punkte 2963

Sie können auch verwenden:

using System.Linq;

stringTest.All(char.IsDigit);

Es wird zurückgegeben true für alle numerischen Ziffern (nicht float ) und false wenn die Eingabezeichenfolge eine alphanumerische Zeichenfolge ist.

Testfall

Rückgabewert

Testergebnis

"1234"

wahr

Pass

"1"

wahr

Pass

"0"

wahr

Pass

""

wahr

Fail (bekannter Grenzfall)

"12.34"

falsch

Pass

"+1234"

falsch

Pass

"-13"

falsch

Pass

"3E14"

falsch

Pass

"0x10"

falsch

Pass

Bitte beachten Sie : stringTest sollte keine leere Zeichenkette sein, da diese den Test auf numerische Werte bestehen würde.

146voto

Nelson Miranda Punkte 5317

Ich habe diese Funktion schon mehrmals benutzt:

public static bool IsNumeric(object Expression)
{
    double retNum;

    bool isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);
    return isNum;
}

Sie können es aber auch verwenden;

bool b1 = Microsoft.VisualBasic.Information.IsNumeric("1"); //true
bool b2 = Microsoft.VisualBasic.Information.IsNumeric("1aa"); // false

Desde Benchmarking IsNumeric Optionen

alt text
(Quelle: <a href="http://aspalliance.com/images/articleimages/80/Figure1.gif" rel="noreferrer">aspalliance.de </a>)

alt text
(Quelle: <a href="http://aspalliance.com/images/articleimages/80/Figure2.gif" rel="noreferrer">aspalliance.de </a>)

34voto

Euro Micelli Punkte 32040

Dies ist wahrscheinlich die beste Option in C#.

Wenn Sie wissen wollen, ob die Zeichenkette eine ganze Zahl (Integer) enthält:

string someString;
// ...
int myInt;
bool isNumerical = int.TryParse(someString, out myInt);

Die TryParse-Methode versucht, die Zeichenkette in eine Zahl (Integer) umzuwandeln. Wenn dies gelingt, wird true zurückgegeben und die entsprechende Zahl in myInt gespeichert. Wenn es nicht gelingt, wird false zurückgegeben.

Lösungen unter Verwendung der int.Parse(someString) Alternative, die in anderen Antworten gezeigt wurde, funktioniert, ist aber viel langsamer, da das Auslösen von Ausnahmen sehr teuer ist. TryParse(...) wurde der Sprache C# in Version 2 hinzugefügt, und bis dahin hatten Sie keine Wahl. Jetzt haben Sie eine: Sie sollten daher die Parse() alternativ.

Wenn Sie Dezimalzahlen akzeptieren wollen, hat die Klasse decimal auch eine .TryParse(...) Methode. Ersetzen Sie int durch decimal in der obigen Diskussion, und es gelten dieselben Grundsätze.

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