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?Um eine Zeichenkette abzugleichen, die Folgendes enthält sólo diese Zeichen (oder eine leere Zeichenkette), versuchen Sie
"^[a-zA-Z0-9_]*$"
Dies funktioniert für reguläre Ausdrücke in .NET und wahrscheinlich auch in vielen anderen Sprachen.
Die Aufschlüsselung:
^ : start of string
[ : beginning of character group
a-z : any lowercase letter
A-Z : any uppercase letter
0-9 : any digit
_ : underscore
] : end of character group
* : zero or more of the given characters
$ : end of string
Wenn Sie keine leeren Zeichenketten zulassen wollen, verwenden Sie +
代わりに *
.
Wie bereits erwähnt, haben einige Regex-Sprachen eine Kurzform für [a-zA-Z0-9_]
. In der .NET-Regex-Sprache können Sie das ECMAScript-Verhalten aktivieren und Folgendes verwenden \w
als Abkürzung (was zu ^\w*$
ou ^\w+$
). Beachten Sie, dass in anderen Sprachen, und standardmäßig in .NET, \w
ist etwas breiter angelegt und passt auch auf andere Unicode-Zeichen (danke an Jan für den Hinweis). Wenn Sie also wirklich beabsichtigen, eine Übereinstimmung mit sólo Bei diesen Zeichen ist es wahrscheinlich am besten, die explizite (längere) Form zu verwenden.
Es gibt hier eine Menge Wortklauberei, und ich bin zutiefst dagegen, also wäre meine abschließende Antwort:
/^\w+$/
\w
と同じです。 [A-Za-z0-9_]
was ziemlich genau das ist, was Sie wollen. (es sei denn, wir führen Unicode in den Mix ein)
Die Verwendung des +
Quantifizierer werden Sie ein oder mehrere Zeichen abgleichen. Wenn Sie auch eine leere Zeichenkette akzeptieren wollen, verwenden Sie *
stattdessen.
Sie möchten sicherstellen, dass jedes Zeichen Ihren Anforderungen entspricht. Deshalb verwenden wir diese Methode:
[A-Za-z0-9_]
Und Sie können sogar die Kurzfassung verwenden:
\w
Was gleichbedeutend ist (in einigen Regex-Varianten, also überprüfen Sie es, bevor Sie es verwenden). Um dann anzugeben, dass die gesamte Zeichenfolge übereinstimmen muss, verwenden Sie:
^
Um anzugeben, dass die Zeichenkette mit diesem Zeichen beginnen muss, verwenden Sie
$
Um anzuzeigen, dass die Zeichenfolge mit diesem Zeichen enden muss. Dann verwenden Sie
\w+ or \w*
Zur Angabe von "1 oder mehr" oder "0 oder mehr". Alles zusammengenommen ergibt das:
^\w*$
Obwohl es ausführlicher ist als \w
schätze ich persönlich die Lesbarkeit der vollständigen POSIX-Zeichenklassennamen ( http://www.zytrax.com/tech/web/regex.htm#special ), also würde ich sagen:
^[[:alnum:]_]+$
In der Dokumentation unter den oben genannten Links heißt es jedoch, dass \w
jedes Zeichen im Bereich 0 - 9, A - Z und a - z (Äquivalent zu POSIX [:alnum:]) abgleichen kann", habe ich nicht herausgefunden, dass dies der Wahrheit entspricht. Nicht mit grep -P
sowieso. Sie müssen den Unterstrich explizit einfügen, wenn Sie [:alnum:]
aber nicht, wenn Sie \w
. Kurz und bündig sind die folgenden Informationen unschlagbar:
^\w+$
Neben der Lesbarkeit ist die Verwendung der POSIX-Zeichenklassen ( http://www.regular-expressions.info/posixbrackets.html ) bedeutet, dass Ihr Regex mit Nicht-ASCII-Zeichenfolgen arbeiten kann, was die bereichsbasierten Regexe nicht können, da sie sich auf die zugrundeliegende Reihenfolge der ASCII-Zeichen verlassen, die sich von anderen Zeichensätzen unterscheiden kann, und daher einige Nicht-ASCII-Zeichen (Buchstaben wie œ) ausschließen, die Sie möglicherweise erfassen möchten.
Ähm...Frage: Muss er mindestens ein Zeichen enthalten oder nicht? Kann es auch eine leere Zeichenkette sein?
^[A-Za-z0-9_]+$
Mindestens ein alphanumerischer Groß- oder Kleinbuchstabe oder ein Unterstrich ist erforderlich. Wenn die Länge Null sein kann, dann ersetzen Sie einfach das + durch *
^[A-Za-z0-9_]*$
Bearbeiten:
Wenn diakritische Zeichen enthalten sein müssen (z. B. Cedille - ç), müssen Sie das Wortzeichen verwenden, das dasselbe tut wie das oben genannte, aber die diakritischen Zeichen enthält:
^\w+$
Oder
^\w*$
- See previous answers
- Weitere Antworten anzeigen