816 Stimmen

Regulärer Ausdruck für alphanumerische Zeichen und Unterstriche

Ich möchte einen regulären Ausdruck haben, der prüft, ob eine Zeichenfolge nur Groß- und Kleinbuchstaben, Zahlen und Unterstriche enthält.

1246voto

Charlie Punkte 42390

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.

469voto

kch Punkte 73753

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.

51voto

Anton Punkte 1337

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*$

49voto

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.

43voto

BenAlabaster Punkte 37617

Ä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*$

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X