Regex, das "mindestens eine Nicht-Ziffer" ausdrückt

8

Ich möchte Benutzernamen nach diesem Schema validieren:

  1. Zulässige Zeichen: Buchstaben, Zahlen, Bindestrich, Unterstrich
  2. Das erste Zeichen muss ein Buchstabe oder eine Zahl sein
  3. Der Benutzername darf nicht aus allen Zahlen bestehen

Dieser reguläre Ausdruck erfüllt die obigen 1 und 2, aber ich kann nicht herausfinden, wie man 3 erfüllt:

%Vor%

(Ich verwende Ruby, wenn das relevant ist)

    
Tom Lehman 24.01.2010, 04:08
quelle

5 Antworten

10

Nicht sehr effizient, aber einfach:

/^(?!\d+$)[a-zA-Z\d][\w\-]+$/

Der Lookahead bedeutet einfach: "Was folgt, ist keine Folge von Zahlen, die bis zum Ende weitergehen".

    
Max Shawabkeh 24.01.2010, 04:11
quelle
1

Nicht ideal, aber einfach: Verwenden Sie einen zweiten Durchlauf mit dem Regex /^.*[a-zA-Z_\-].*$/

Stellen Sie einfach sicher, dass es beides passiert und Sie werden in Ordnung sein.

    
David Kanarek 24.01.2010 04:12
quelle
1

Wenn Sie mit zwei Durchgängen gehen können, ist ein einfacherer und schnellerer Regexp für den zweiten Durchlauf:

%Vor%

Dies passt nur zu allem, was keine Zahl ist, und es muss nur eins übereinstimmen und es endet früh. Sie müssen hier nicht wirklich streng sein, da der erste Durchgang nicht zulässige Zeichen bereits zurückweist.

    
slebetman 24.01.2010 04:18
quelle
0

Ich würde die Regex, die Sie für die Validierung benötigen, und dann etwas wie:

verwenden %Vor%

, um zu überprüfen, ob passwd keine Ziffernfolge ist, nachdem die primäre Validierung bestanden wurde.

    
D.Shawley 24.01.2010 04:25
quelle
0

Noch ein anderer Weg, obwohl es vielleicht nicht so gut funktioniert wie Max:

%Vor%     
outis 24.01.2010 05:42
quelle

Tags und Links