Wenn ich diese Saiten habe:
-
"abc"
=false
-
"123"
=true
-
"ab2"
=false
Gibt es einen Befehl, wie IsNumeric()
oder etwas anderes, das erkennen kann, ob eine Zeichenkette eine gültige Zahl ist?
Wenn ich diese Saiten habe:
"abc"
= false
"123"
= true
"ab2"
= false
Gibt es einen Befehl, wie IsNumeric()
oder etwas anderes, das erkennen kann, ob eine Zeichenkette eine gültige Zahl ist?
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!
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.
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.
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
(Quelle: <a href="http://aspalliance.com/images/articleimages/80/Figure1.gif" rel="noreferrer">aspalliance.de </a>)
(Quelle: <a href="http://aspalliance.com/images/articleimages/80/Figure2.gif" rel="noreferrer">aspalliance.de </a>)
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 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.