Ich habe überhaupt keine regulären Ausdrücke verwendet, daher habe ich Probleme bei der Fehlerbehebung. Ich möchte, dass der reguläre Ausdruck nur übereinstimmt, wenn die enthaltene Zeichenfolge nur aus Zahlen besteht. Bei den beiden folgenden Beispielen stimmt es jedoch mit einer Zeichenfolge überein, die alle Zahlen plus ein Gleichheitszeichen wie "1234 = 4321" enthält. Ich bin mir sicher, dass es eine Möglichkeit gibt, dieses Verhalten zu ändern, aber wie gesagt, ich habe mit regulären Ausdrücken nie wirklich viel 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 darauf ankommt, verwende ich C # und .NET2.0.
Antworten:
Verwenden Sie die Anfangs- und Endanker.
Verwenden
"^\d+$"
Sie diese Option, wenn Sie mehr als eine Ziffer abgleichen müssen.Beachten Sie, dass andere Ziffern wie die ostarabischen Ziffern
"\d"
übereinstimmen . Verwenden Sie diese Option, um Übereinstimmungen nur auf die arabischen Ziffern 0 - 9 zu beschränken.[0-9]
٠١٢٣٤٥٦٧٨٩
"^[0-9]+$"
Wenn Sie andere numerische Darstellungen als nur Ziffern (wie z. B. Dezimalwerte für den Anfang) einfügen müssen , lesen Sie die umfassende Anleitung von @tchrist zum Parsen von Zahlen mit regulären Ausdrücken .
quelle
"^\d{6}$"
. In einigen anderen Ländern gibt es kompliziertere Regeln für Postleitzahlen, sodass Regex-Lösungen für mehrere Länder ebenfalls ziemlich kompliziert werden können. Schauen Sie sich einige der Beispiele unter stackoverflow.com/q/578406/1288Ihre Regex stimmt mit allem überein, was eine Zahl enthält. Sie möchten Anker verwenden, um die gesamte Zeichenfolge abzugleichen, und dann eine oder mehrere Zahlen abgleichen:
Das
^
verankert den Anfang der Zeichenfolge, das$
verankert das Ende der Zeichenfolge und+
stimmt mit einem oder mehreren der vorhergehenden Zeichen überein (in diesem Fall mit einer Zahl).quelle
Wenn Sie Dezimalstellen und Tausendermarkierungen tolerieren müssen
Sie benötigen ein "-", wenn die Zahl negativ werden kann.
quelle
-
) und die Periode (.
) mehr als einmal auftreten.-
und.
optional über machen?
.-?\d+(?:\.\d+)?
würde mit ganzen Zahlen oder Dezimalstellen übereinstimmen. (Die?:
in den Parens machen die Parens nur zu einer nicht erfassenden Gruppe und werden nur aus Gründen der Klarheit verwendet.)^-?[0-9][0-9,\.]*$
, dass der Grundfall nicht fehlschlägt. + wird ersetzt durch *Es stimmt überein, weil es "eine Übereinstimmung" findet, nicht eine Übereinstimmung der vollständigen Zeichenfolge. Sie können dies beheben, indem Sie Ihren regulären Ausdruck so ändern, dass er gezielt nach Anfang und Ende der Zeichenfolge sucht.
quelle
Vielleicht hilft Ihnen meine Methode.
quelle
Char.IsDigit
Renditentrue
für jedes Zeichen , das ein Mitglied der ist UnicodeCategory.DecimalDigitNumber Kategorie. Dies ist möglicherweise nicht das, was das OP will. Siehe auch Warum Char.IsDigit true für Zeichen zurückgibt, die nicht auf int analysiert werden können. .Dies funktioniert mit Ganzzahlen und Dezimalzahlen. Es stimmt nicht überein, wenn die Zahl das Koma-Tausender-Trennzeichen hat.
Einige Zeichenfolgen, die dazu passen:
einige Saiten, die nicht:
quelle
^ \ d + $, was auf Englisch "Anfang der Zeichenfolge", "1 oder mehr Ziffern", "Ende der Zeichenfolge" bedeutet.
quelle
Wenn Sie überprüfen müssen, ob alle Ziffern die Nummer (0-9) sind oder nicht,
1425 WAHR
0142 WAHR
0 WAHR
1 WAHR
154a25 FALSE
1234 = 3254 FALSE
quelle
Hier ist meine Arbeit:
Und einige Tests
Positive Tests:
Negative Tests:
Nicht nur auf C # geprüft, sondern auch mit Java, Javascript und PHP
quelle
Entschuldigung für die hässliche Formatierung. Für eine beliebige Anzahl von Ziffern:
Für eine oder mehrere Ziffern:
quelle
Obwohl keine der oben genannten Lösungen meinem Zweck entsprach, funktionierte dies für mich.
Beispiel für gültige Werte: "3", "-3", "0", "0,0", "1,0", "0,7", "690,7", "0,0001", "-555", "945465464654"
Beispiel für ungültige Werte: "a", "", "", ".", "-", "001", "00.2", "000.5", ".3", "3.", "-1" , "-1", "-.1", "-0", "00099", "099"
quelle
Ein anderer Weg: Wenn Sie internationale Zahlen wie Persisch oder Arabisch abgleichen möchten, können Sie folgenden Ausdruck verwenden:
Verwenden Sie Folgendes, um das Zeichen für einen wörtlichen Punkt abzugleichen:
quelle
Verwenden Sie Anfangs- und Endanker.
quelle
Regex für Ganzzahl- und Gleitkommazahlen:
Eine Nummer kann mit einem Punkt beginnen (ohne führende Ziffern), und eine Nummer kann mit einem Punkt enden (ohne nachfolgende Ziffern). Über Regex werden beide als korrekte Zahlen erkannt.
EIN . (Punkt) selbst ohne Ziffern ist keine korrekte Zahl. Deshalb brauchen wir dort zwei Regex-Teile (getrennt durch ein "|").
Hoffe das hilft.
quelle
Ich denke, dass dies die einfachste ist und die europäische und US-amerikanische Schreibweise von Zahlen akzeptiert, z. B. USA 10.555,12 Europäisch 10.555.12 Auch diese erlaubt nicht mehrere Kommas oder Punkte nacheinander, z. B. 10..22 oder 10, .22 Zusätzlich zu diesen Zahlen wie .55 oder würde 55 passieren. Dies kann nützlich sein.
quelle
Wenn Sie nur Zahlen aus einer Zeichenfolge extrahieren möchten, sollte das Muster "\ d +" hilfreich sein.
quelle
Regex Regex = neuer Regex ("^ [0-9] {1,4} = [0-9] {1,4] $")
quelle