it-swarm.com.de

Regex-Muster für mindestens 1 Ziffer und 1 Zeichen in einer Zeichenfolge

Ich habe einen regulären Ausdruck

/^([a-zA-Z0-9]+)$/

dies erlaubt nur alphanumerische Zeichen, aber auch wenn ich nur Zahlen oder nur Zeichen einfüge, akzeptiert es dies auch. Ich möchte, dass es so funktioniert, dass das Feld nur alphanumerische Werte akzeptiert, aber der Wert muss mindestens 1 Zeichen und 1 Zahl enthalten.

39
OM The Eternity

Warum wenden Sie nicht zuerst den gesamten Test an und fügen dann einzelne Tests für Zeichen und Zahlen hinzu? Wenn Sie alles in einem einzigen regulären Ausdruck tun möchten, verwenden Sie einen positiven Lookahead:

/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/
78
phihag

Diese RE wird tun:

/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i

Erklärung von RE:

  • Passen Sie eines der folgenden an:
    1. Mindestens eine Zahl, dann ein Buchstabe oder
    2. Mindestens ein Buchstabe, dann eine Zahl plus
  • Alle verbleibenden Zahlen und Buchstaben

  • (?:...) erstellt eine nicht referenzierte Gruppe
  • /i ist das Flag ignore-case , so dass a-z == a-zA-Z.
17
Rob W

Ich kann sehen, dass andere Antwortende Ihnen eine vollständige Lösung gegeben haben. Problem mit Regex ist, dass sie schwer zu pflegen/zu verstehen sein können.

Eine einfachere Lösung wäre, den vorhandenen regulären Ausdruck beizubehalten und dann zwei neue reguläre Ausdrücke zu erstellen, um "mindestens ein Alphabet" und "mindestens eine Zahl" zu testen.

Also, testen Sie dies: -

/^([a-zA-Z0-9]+)$/

Dann das :-

/\d/

Dann das :-

/[A-Z]/i

Wenn Ihre Zeichenfolge alle drei Regexe durchläuft, haben Sie die Antwort, die Sie brauchen.

14

Obwohl die akzeptierte Antwort korrekt ist, finde ich diese Regex viel einfacher zu lesen:

REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"
5
Lonely Neuron

Diese Lösung akzeptiert mindestens eine Zahl und mindestens ein Zeichen:

[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
4
user2043372

Vielleicht etwas spät, aber das ist meine RE:

/^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/

Erläuterung:

\w* -> 0 oder mehr alphanumerische Ziffern am Anfang

\d+[a-zA-Z]|[a-zA-Z]+\d -> eine Ziffer + ein Buchstabe OR ein Buchstabe + eine Ziffer

\w* -> 0 oder mehr alphanumerische Ziffern

Ich hoffe es war verständlich

3
Pablo Garcia

Und eine Idee mit einem negativen Scheck.

/^(?!\d*$|[a-z]*$)[a-z\d]+$/i
  • ^(?! beim start vorausschauend wenn string nicht
  • \d*$ enthält nur Ziffern | oder
  • [a-z]*$ enthält nur Buchstaben
  • [a-z\d]+$ stimmt mit einem oder mehreren Buchstaben oder Ziffern überein, bis $ beendet ist.

Schauen Sie sich diese regex101-Demo an

(Das Flag i aktiviert die falllose Übereinstimmung : a-z stimmt mit a-zA-Z überein.)

2
bobble bubble

Die akzeptierten Antworten funktionieren nicht, da keine Sonderzeichen eingegeben werden dürfen.

Es hat perfekt für mich funktioniert.

^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S+$).{6,20}$

  • eine Ziffer muss
  • ein Zeichen muss (unteres oder oberes)
  • alles andere optional

Danke.