Wie kann ich eine Zeichenfolge mit regulären Ausdrücken überprüfen, um nur alphanumerische Zeichen darin zuzulassen?
(Ich möchte auch keine Leerzeichen zulassen).
Verwenden Sie den folgenden Ausdruck:
^[a-zA-Z0-9]*$
dh:
using System.Text.RegularExpressions;
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
...
}
In .NET 4.0 können Sie LINQ verwenden:
yourText.All
stoppt die Ausführung und gibtfalse
die erstenchar.IsLetterOrDigit
Berichte zurück,false
da der Vertrag vonAll
dann nicht erfüllt werden kann.Hinweis! Diese Antwort überprüft nicht unbedingt die alphanumerischen Zeichen (normalerweise AZ, az und 0-9). Diese Antwort erlaubt lokale Zeichen wie
åäö
.Update 2018-01-29
Die obige Syntax funktioniert nur, wenn Sie eine einzelne Methode verwenden, die ein einzelnes Argument des richtigen Typs enthält (in diesem Fall
char
).Um mehrere Bedingungen zu verwenden, müssen Sie wie folgt schreiben:
quelle
char.IsLetterOrDigit('ก')
Wird zum Beispiel zurückkehrentrue
. csharppad.com/gist/f96a6062f9f8f4e974f222ce313df8caSie könnten es leicht mit einer Erweiterungsfunktion anstelle eines regulären Ausdrucks tun ...
Per Kommentar :) ...
quelle
char.IsLetterOrDigit
stattdessen IsLetter + IsNumberWährend ich denke, dass die Regex-basierte Lösung wahrscheinlich der richtige Weg ist, wäre ich versucht, dies in einem Typ zusammenzufassen.
Wenn Sie jetzt eine validierte Zeichenfolge benötigen, kann für die Methodensignatur ein AlphaNumericString erforderlich sein, und Sie wissen, dass eine gültige Zeichenfolge gültig ist (abgesehen von Nullen). Wenn jemand versucht, eine nicht validierte Zeichenfolge zu übergeben, wird ein Compilerfehler generiert.
Sie können schicker werden und alle Gleichheitsoperatoren implementieren oder eine explizite Umwandlung in AlphaNumericString aus einer einfachen alten Zeichenfolge, wenn Sie möchten.
quelle
static public implicit operator string
Teil zu verstehenIch musste nach AZ suchen, az, 0-9; ohne Regex (obwohl das OP nach Regex fragt).
Hier werden verschiedene Antworten und Kommentare sowie Diskussionen von https://stackoverflow.com/a/9975693/292060 kombiniert , um Buchstaben oder Ziffern zu testen, andere Sprachbuchstaben zu vermeiden und andere Zahlen wie Bruchzeichen zu vermeiden.
quelle
^\w+$
erlaubta-zA-Z0-9_
Verwenden Sie
^[a-zA-Z0-9]+$
diese Option, um den Unterstrich zu verbieten.Beachten Sie, dass für beide die Zeichenfolge nicht leer sein muss. Die Verwendung von
*
anstelle von+
erlaubt leere Zeichenfolgen.quelle
^[\w-]+$
Um zu überprüfen, ob die Zeichenfolge sowohl eine Kombination aus Buchstaben als auch Ziffern ist, können Sie die Antwort @jgauffin mit .NET 4.0 und LINQ wie folgt neu schreiben:
quelle
Gleiche Antwort wie hier .
Wenn Sie eine Nicht-Regex-ASCII-
A-z 0-9
Prüfung wünschen , können Sie diese nicht verwenden,char.IsLetterOrDigit()
da dies andere Unicode-Zeichen enthält.Sie können die Zeichencodebereiche überprüfen.
Das Folgende ist etwas ausführlicher, dient jedoch eher dem besseren Verständnis als dem Code-Golf.
quelle
Basierend auf der Antwort von cletus können Sie eine neue Erweiterung erstellen.
quelle
Ich rate, sich nicht auf fertigen und eingebauten Code in .NET Framework zu verlassen, sondern eine neue Lösung aufzurufen. Dies ist, was ich tue.
quelle
char.IsNumber()
Methode nicht verwenden , da dies vorgefertigter Code ist.