Co to jest wyrażenie regularne, aby upewnić się, że dany ciąg zawiera co najmniej jeden znak z każdej z poniższych kategorii.
- Mała litera
- Wielkie litery
- Cyfra
- Symbol
Znam wzory dla poszczególnych zestawów mianowicie [a-z]
, [A-Z]
, \d
i _|[^\w]
(Mam je skorygować, prawda?).
Ale jak je połączyć, aby upewnić się, że ciąg zawiera je wszystkie w dowolnej kolejności?
Odpowiedzi:
Jeśli potrzebujesz jednego wyrażenia regularnego, spróbuj:
Krótkie wyjaśnienie:
I zgadzam się z SilentGhost,
\W
może być trochę szerokie. Zastąpiłbym go takim zestawem znaków:[-+_!@#$%^&*.,?]
(oczywiście możesz dodać więcej!)źródło
.+
na.*
? Nie mogłem wymyślić przypadku testowego, który się nie udaje.*
. Czy są takie same w tym kontekście? „Zero lub więcej znaków” wydaje się być w porządku - po prostu szukam potwierdzenia..+
na.*
lub nawet.{4,}
w tym zakresie.^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?!.*[&%$]).{6,}$
Bart Kiers, Twoje wyrażenie regularne ma kilka problemów. Najlepszym sposobem na to jest:
W ten sposób szukasz bez względu na to, czy na początku, na końcu, czy w środku. Mam dużo problemów ze złożonymi hasłami.
źródło
Możesz dopasować te trzy grupy osobno i upewnić się, że wszystkie są obecne. Ponadto,
[^\w]
wydaje się nieco zbyt szeroka, ale jeśli to, co chcesz, możesz go zastąpić\W
.źródło
\W
i[\W]
skutkuje tym samym.