Antworten:
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:
if (yourText.All(char.IsLetterOrDigit))
{
//just letters and digits.
}
yourText.All
stoppt die Ausführung und gibt false
die ersten char.IsLetterOrDigit
Berichte zurück, false
da der Vertrag von All
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:
if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
char.IsLetterOrDigit('ก')
Wird zum Beispiel zurückkehren true
. csharppad.com/gist/f96a6062f9f8f4e974f222ce313df8ca
Sie könnten es leicht mit einer Erweiterungsfunktion anstelle eines regulären Ausdrucks tun ...
public static bool IsAlphaNum(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
for (int i = 0; i < str.Length; i++)
{
if (!(char.IsLetter(str[i])) && (!(char.IsNumber(str[i]))))
return false;
}
return true;
}
Per Kommentar :) ...
public static bool IsAlphaNum(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
return (str.ToCharArray().All(c => Char.IsLetter(c) || Char.IsNumber(c)));
}
char.IsLetterOrDigit
stattdessen IsLetter + IsNumber
Während ich denke, dass die Regex-basierte Lösung wahrscheinlich der richtige Weg ist, wäre ich versucht, dies in einem Typ zusammenzufassen.
public class AlphaNumericString
{
public AlphaNumericString(string s)
{
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(s))
{
value = s;
}
else
{
throw new ArgumentException("Only alphanumeric characters may be used");
}
}
private string value;
static public implicit operator string(AlphaNumericString s)
{
return s.value;
}
}
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.
static public implicit operator string
Teil zu verstehen
Ich 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.
if (!String.IsNullOrEmpty(testString)
&& testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
// Alphanumeric.
}
^\w+$
erlaubt a-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.
^[\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:
if(!string.IsNullOrWhiteSpace(yourText) &&
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
// do something here
}
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.
public static bool IsAsciiAlphaNumeric(this string str)
{
if (string.IsNullOrEmpty(str))
{
return false;
}
for (int i = 0; i < str.Length; i++)
{
if (str[i] < 48) // Numeric are 48 -> 57
{
return false;
}
if (str[i] > 57 && str[i] < 65) // Capitals are 65 -> 90
{
return false;
}
if (str[i] > 90 && str[i] < 97) // Lowers are 97 -> 122
{
return false;
}
if (str[i] > 122)
{
return false;
}
}
return true;
}
Basierend auf der Antwort von cletus können Sie eine neue Erweiterung erstellen.
public static class StringExtensions
{
public static bool IsAlphaNumeric(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
Regex r = new Regex("^[a-zA-Z0-9]*$");
return r.IsMatch(str);
}
}
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.
public bool isAlphaNumeric(string N)
{
bool YesNumeric = false;
bool YesAlpha = false;
bool BothStatus = false;
for (int i = 0; i < N.Length; i++)
{
if (char.IsLetter(N[i]) )
YesAlpha=true;
if (char.IsNumber(N[i]))
YesNumeric = true;
}
if (YesAlpha==true && YesNumeric==true)
{
BothStatus = true;
}
else
{
BothStatus = false;
}
return BothStatus;
}
char.IsNumber()
Methode nicht verwenden , da dies vorgefertigter Code ist.