Ich möchte einen regulären Ausdruck haben, der prüft, ob eine Zeichenfolge nur Groß- und Kleinbuchstaben, Zahlen und Unterstriche enthält.
Antworten
Zu viele Anzeigen?In der Informatik bedeutet ein alphanumerischer Wert oft, dass das erste Zeichen keine Zahl, sondern ein Alphabet oder ein Unterstrich ist. Danach kann das Zeichen sein 0-9
, A-Z
, a-z
oder Unterstrich ( _
).
So können Sie das tun:
Getestet unter php:
$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'
oder nehmen Sie dies
^[A-Za-z_][A-Za-z\d_]*$
und platzieren Sie es in Ihrer Entwicklungssprache.
Verwenden Sie Lookaheads, um die "mindestens eine" Sache zu erledigen. Glaub mir, das ist viel einfacher.
Hier ein Beispiel, für das 1-10 Zeichen erforderlich wären, die mindestens eine Ziffer und einen Buchstaben enthalten:
^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$
ANMERKUNG: könnte verwendet werden \w aber dann kommen ECMA/Unicode-Überlegungen ins Spiel, die den Zeichenumfang der \w "Wortzeichen".
Das funktioniert bei mir, ich habe es im O'Reilly-Buch "Mastering Regular Expressions" gefunden:
/^\w+$/
Erläuterung:
- ^ bestätigt die Position am Anfang der Zeichenkette
- \w + entspricht einem beliebigen Wortzeichen (gleich [a-zA-Z0-9_])
- "+"-Quantifizierer - Entspricht zwischen einem und einer unbegrenzten Anzahl von Übereinstimmungen, so oft wie möglich, und gibt so viel wie nötig zurück (gierig)
- $ bestätigt die Position am Ende der Zeichenkette
Überprüfen Sie sich selbst:
const regex = /^\w+$/;
const str = `nut_cracker_12`;
let m;
if ((m = regex.exec(str)) !== null) {
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Probieren Sie diese mehrsprachigen Erweiterungen aus, die ich für String erstellt habe.
IsAlphaNumeric - String muss mindestens 1 Alpha (Buchstabe im Unicode-Bereich, angegeben in charSet) und mindestens 1 Zahl (angegeben in numSet) enthalten. Außerdem sollte die Zeichenfolge nur aus Buchstaben und Zahlen bestehen.
IsAlpha - Die Zeichenkette muss mindestens 1 Alpha enthalten (in der angegebenen Sprache charSet) und darf nur aus Alpha bestehen.
IsNumeric - Die Zeichenfolge muss mindestens 1 Zahl enthalten (in der angegebenen Sprache numSet) und darf nur aus Zahlen bestehen.
Der charSet/numSet-Bereich für die gewünschte Sprache kann angegeben werden. Die Unicode-Bereiche sind unter dem folgenden Link verfügbar:
http://www.ssec.wisc.edu/~tomw/java/unicode.html
API :
public static bool IsAlphaNumeric(this string stringToTest)
{
//English
const string charSet = "a-zA-Z";
const string numSet = @"0-9";
//Greek
//const string charSet = @"\u0388-\u03EF";
//const string numSet = @"0-9";
//Bengali
//const string charSet = @"\u0985-\u09E3";
//const string numSet = @"\u09E6-\u09EF";
//Hindi
//const string charSet = @"\u0905-\u0963";
//const string numSet = @"\u0966-\u096F";
return Regex.Match(stringToTest, @"^(?=[" + numSet + @"]*?[" + charSet + @"]+)(?=[" + charSet + @"]*?[" + numSet + @"]+)[" + charSet + numSet +@"]+$").Success;
}
public static bool IsNumeric(this string stringToTest)
{
//English
const string numSet = @"0-9";
//Hindi
//const string numSet = @"\u0966-\u096F";
return Regex.Match(stringToTest, @"^[" + numSet + @"]+$").Success;
}
public static bool IsAlpha(this string stringToTest)
{
//English
const string charSet = "a-zA-Z";
return Regex.Match(stringToTest, @"^[" + charSet + @"]+$").Success;
}
Verwendung:
//English
string test = "AASD121asf";
//Greek
//string test = "123";
//Bengali
//string test = "";
//Hindi
//string test = @"";
bool isAlphaNum = test.IsAlphaNumeric();