wake-up-neo.com

Regulärer Ausdruck für alphanumerische Zeichen und Unterstriche

Ich hätte gerne einen regulären Ausdruck, der überprüft, ob eine Zeichenfolge nur Groß- und Kleinbuchstaben, Zahlen und Unterstriche enthält.

487
Jim

Versuchen Sie, eine Zeichenfolge zu finden, die only diese Zeichen (oder eine leere Zeichenfolge) enthält

"^[a-zA-Z0-9_]*$"

Dies funktioniert für reguläre .NET-Ausdrücke und wahrscheinlich auch für viele andere Sprachen.

Brechen sie ab:

^ : 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 Zeichenfolgen zulassen möchten, verwenden Sie + anstelle von *.

EDITWie andere darauf hingewiesen haben, haben einige Regex-Sprachen eine Kurzform für [a-zA-Z0-9_]. In der .NET-Regex-Sprache können Sie das Verhalten von ECMAScript aktivieren und \w als Abkürzung (mit ^\w*$ oder ^\w+$) verwenden. Beachten Sie, dass \w in anderen Sprachen und standardmäßig in .NET etwas breiter ist und auch mit anderen Arten von Unicode-Zeichen übereinstimmt (danke, dass Sie Jan darauf hingewiesen haben). Wenn Sie also wirklich mit nur diesen Zeichen übereinstimmen möchten, ist die Verwendung der expliziten (längeren) Form wahrscheinlich am besten.

809
Charlie

Es gibt hier eine Menge von Ausführlichkeit, und ich bin zutiefst dagegen, daher wäre meine schlüssige Antwort:

/^\w+$/

\w ist äquivalent zu [A-Za-z0-9_], was so ziemlich das ist, was Sie wollen. (es sei denn, wir bringen Unicode in die Mischung ein)

Mit dem +-Quantifizierer stimmen Sie mit einem oder mehreren Zeichen überein. Wenn Sie auch eine leere Zeichenfolge akzeptieren möchten, verwenden Sie stattdessen *.

276
kch

Sie möchten überprüfen, ob jeder Charakter Ihren Anforderungen entspricht. Deshalb verwenden wir:

[A-Za-z0-9_]

Und Sie können sogar die Kurzfassung verwenden:

\w

Welches ist gleichwertig (in einigen Regex-Flavours, so überprüfen Sie, bevor Sie es verwenden). Um anzuzeigen, dass die gesamte Zeichenfolge übereinstimmen muss, verwenden Sie Folgendes:

^

Um anzugeben, dass die Zeichenfolge mit diesem Zeichen beginnen muss, verwenden Sie

$

Um anzuzeigen, dass die Zeichenfolge mit diesem Zeichen enden muss. Dann benutze

\w+ or \w*

Um "1 oder mehr" oder "0 oder mehr" anzuzeigen. Alles in allem haben wir:

^\w*$
33
Anton

Obwohl es wortreicher als \w ist, schätze ich persönlich die Lesbarkeit der vollständigen POSIX-Klassennamen ( http://www.zytrax.com/tech/web/regex.htm#special ), so würde ich sagen : 

^[[:alnum:]_]+$

Während in der Dokumentation unter den obigen Links angegeben wird, dass \w "jedes Zeichen im Bereich von 0 - 9, A - Z und a - z (äquivalent zu POSIX [: alnum:])" findet, habe ich dies nicht gefunden wahr. Jedenfalls nicht mit grep -P. Sie müssen den Unterstrich explizit einschließen, wenn Sie [:alnum:] verwenden, nicht jedoch, wenn Sie \w verwenden. Kurz und bündig können Sie Folgendes nicht schlagen:

^\w+$

Neben der Lesbarkeit bedeutet die Verwendung der POSIX-Zeichenklassen ( http://www.regular-expressions.info/posixbrackets.html ), dass Ihr Regex mit NichtASCII Zeichenfolgen arbeiten kann, die der Bereich umfasst Regex-basierte Ausdrücke tun dies nicht, da sie auf der zugrunde liegenden Reihenfolge der ASCII Zeichen basieren, die sich von anderen Zeichensätzen unterscheiden können und daher einige Nicht-ASCII-Zeichen (Buchstaben wie œ) ausschließen, die Sie möglicherweise benötigen erfassen.

24

Ähm ... Frage: Muss es mindestens einen Buchstaben geben oder nicht? Kann es eine leere Zeichenfolge sein?

^[A-Za-z0-9_]+$

Führt mindestens eine alphanumerische Groß- oder Kleinschreibung oder einen Unterstrich aus. Wenn die Länge Null sein kann, ersetzen Sie einfach das + durch *.

^[A-Za-z0-9_]*$

Bearbeiten:

Wenn Diakritika einbezogen werden müssen (z. B. Cedilla - ç), müssen Sie das Word-Zeichen verwenden, das dasselbe tut wie oben, jedoch die diakritischen Zeichen enthält:

^\w+$

Oder

^\w*$
23
BenAlabaster

In der Informatik bedeutet ein alphanumerischer Wert oft, dass das erste Zeichen keine Zahl ist, sondern ein Alphabet oder ein Unterstrich. Danach kann das Zeichen 0-9, A-Z, a-z oder Unterstrich (_) sein.

So würden Sie das machen:

Getestet unter PHP:

$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'

oder nimm das

^[A-Za-z_][A-Za-z\d_]*$

und platzieren Sie es in Ihrer Entwicklungssprache.

15
Danuel O'Neal

Wie wäre es mit:

^([A-Za-z]|[0-9]|_)+$

... wenn Sie explizit sein wollen, oder:

^\w+$

... wenn Sie es vorziehen, kurz zu sein (Perl-Syntax).

12
Drew Hall

verwenden Sie Lookaheads, um das "mindestens eine" Zeug zu erledigen. Vertrauen Sie mir, es ist viel einfacher.

Hier ein Beispiel, das 1 bis 10 Zeichen benötigt, die mindestens eine Ziffer und einen Buchstaben enthalten: 

^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$

ANMERKUNG: Könnte\w verwendet haben, aber dann kommen ECMA/Unicode-Überlegungen ins Spiel, die die Zeichenabdeckung des\w "Word-Zeichens" erhöhen.

11
boooloooo

Versuchen Sie diese mehrsprachigen Erweiterungen, die ich für string erstellt habe. 

IsAlphaNumeric - String muss mindestens 1 Alpha (Buchstabe im Unicode-Bereich, angegeben in charSet) und mindestens 1 Nummer (in NumSet) enthalten. Die Zeichenfolge sollte auch nur aus Alpha und Zahlen bestehen.

IsAlpha - String sollte mindestens 1 Alpha (in der angegebenen Sprache charSet) enthalten und nur aus Alpha bestehen.

IsNumeric - String sollte mindestens eine Zahl (in der angegebenen Sprache numSet) enthalten und nur aus Zahlen bestehen.

Der Zeichensatz/Nummernbereich 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 [email protected]"]+$").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;
    }

Verwendungszweck :

        //English
        string test = "AASD121asf";

        //Greek
        //string test = "Ϡϛβ123";

        //Bengali
        //string test = "শর৩৮";

        //Hindi
        //string test = @"क़लम३७ख़";

        bool isAlphaNum = test.IsAlphaNumeric();
9
Shantanu

Der folgende Ausdruck entspricht alphanumerischen Zeichen und Unterstrich: 

^[a-zA-Z0-9_]+$

Zum Beispiel in Perl:

#!/usr/bin/Perl -w

my $arg1 = $ARGV[0];

# check that the string contains *only* one or more alphanumeric chars or underscores
if ($arg1 !~ /^[a-zA-Z0-9_]+$/) {
  print "Failed.\n";
} else {
    print "Success.\n";
}
8
Jay

Für mich bestand das Problem, dass ich zwischen alphanumerischen, numerischen und alphanumerischen Zeichen unterscheiden möchte. Um sicherzustellen, dass eine alphanumerische Zeichenfolge mindestens ein Alpha und mindestens eine Zahl enthält, habe ich Folgendes verwendet: 

^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$
4
mylesmckeown

Für diejenigen von Ihnen, die nach einem alphanumerischen Unicode-Abgleich suchen, möchten Sie vielleicht Folgendes tun:

^[\p{L} \p{Nd}_]+$

Weitere Informationen unter http://unicode.org/reports/tr18/ Und at http://www.regular-expressions.info/unicode.html

2
Agustin

durch das Zusammenbringen von Diakritika in einem Regex werden zahlreiche Würmer geöffnet, insbesondere unter Berücksichtigung von Unicode. Vielleicht möchten Sie etwas über Posix-Gebietsschemas erfahren.

1
Jean-Denis Muys

Hier ist der Regex für das, was Sie mit einem Quantifizierer wünschen, um mindestens 1 und nicht mehr als 255 Zeichen anzugeben

[^ a-zA-Z0-9 _] {1,255}

1
mson

^\w * $ funktioniert für folgende Kombination: 1 123 1av pRo av1

0
Mukund

Versuchen Sie, die gesamte Zeichenfolge zu überprüfen und leere Zeichenfolgen nicht zuzulassen

^[A-Za-z0-9_]+$
0
David Norman

Ich glaube, Sie nehmen keine lateinischen und Unicode-Zeichen in Ihren Matches an. Wenn Sie beispielsweise die Zeichen "ã" oder "ü" nehmen müssen, funktioniert die Verwendung von "\ w" nicht.

Alternativ können Sie diesen Ansatz verwenden:

^[A-ZÀ-Ýa-zà-ý0-9_]+$

Ich hoffe es hilft!

0
Marcio Martins

das funktioniert für mich, du kannst es versuchen [\ p {Alnum} _]

0
Saurabh