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.
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]+)$/
Diese RE wird tun:
/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i
Erklärung von RE:
(?:...)
erstellt eine nicht referenzierte Gruppe/i
ist das Flag ignore-case , so dass a-z
== a-zA-Z
.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.
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]*"
Diese Lösung akzeptiert mindestens eine Zahl und mindestens ein Zeichen:
[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
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
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.)
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}$
Danke.