Chcę, aby wyrażenie regularne sprawdzało, czy:
Hasło zawiera co najmniej osiem znaków, w tym co najmniej jednego numeru i obejmuje zarówno dolne i wielkich liter oraz znaków specjalnych, na przykład #
, ?
, !
.
Nie może to być twoje stare hasło ani nazwa użytkownika "password"
, lub"websitename"
A oto moje wyrażenie walidacyjne, które dotyczy ośmiu znaków, w tym jednej wielkiej litery, jednej małej litery oraz jednej cyfry lub znaku specjalnego.
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
Jak mogę napisać, aby hasło składało się z ośmiu znaków, w tym jednej wielkiej litery, jednego znaku specjalnego i znaków alfanumerycznych ?
źródło
Możesz użyć tego wyrażenia regularnego z wieloma twierdzeniami dotyczącymi przyszłości (warunki) :
Ten regex wymusi następujące reguły:
(?=.*?[A-Z])
(?=.*?[a-z])
(?=.*?[0-9])
(?=.*?[#?!@$%^&*-])
.{8,}
(z kotwami)źródło
Wyrażenia regularne nie mają operatora AND, więc bardzo trudno jest napisać wyrażenie pasujące do poprawnych haseł, gdy ważność jest zdefiniowana przez coś ORAZ coś innego ORAZ coś innego ...
Ale wyrażenia regularne mają operator OR, więc po prostu zastosuj twierdzenie DeMorgan i napisz wyrażenie pasujące do niepoprawnych haseł:
Wszystko z mniej niż ośmioma znakami LUB cokolwiek bez cyfr LUB cokolwiek bez wielkich liter LUB cokolwiek bez małych liter LUB cokolwiek bez znaków specjalnych.
Więc:
Jeśli coś pasuje, to jest to nieprawidłowe hasło.
źródło
|[a-zA-Z0-9]*
.Tylko małe ulepszenie odpowiedzi @ anubhava: Ponieważ znaki specjalne są ograniczone do znaków na klawiaturze, użyj tego dla każdego znaku specjalnego:
^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$
Ten regex wymusi następujące reguły:
źródło
\W
dopasowuje tylko znaki ASCII. Więc tego nie zmieniłeś, a teraz musisz odfiltrować białe znaki. Ponadto wszystkie{1,}
dodane przez Ciebie nawiasy i kwantyfikatory to czysty szum, a usunięcie?
operatorów innych niż chciwość ( ) było bezcelowe. Tutaj nie ma poprawy.Z trudem podążałem za najbardziej popularną odpowiedzią na moje okoliczności. Na przykład moja walidacja zakończyła się niepowodzeniem ze znakami takimi jak
;
lub[
. Nie byłem zainteresowany umieszczaniem na liście moich znaków specjalnych na białej liście, więc zamiast tego wykorzystałem[^\w\s]
jako test - po prostu - dopasowuję znaki nie zawierające słów (w tym numeryczne) i znaki spacji. Podsumowując, oto, co zadziałało dla mnie ...8
postacie1
znak numeryczny1
mała litera1
wielka litera1
znak specjalnyJSFiddle Link - proste demo obejmujące różne przypadki
źródło
(?=.*?[^\w\s])
ze(?=.*?([^\w\s]|[_]))
aby dodać wsparcie dla podkreślenia i teraz działa świetnie. Również @ Dinish.net system, którego używam, przycina białe znaki z ciągu hasła, gdy go otrzymujemy, więc użycie waniliowej metody JS String.prototype.trim () działałoby dobrze, jeśli chcesz użyć tej odpowiedzi.Bardziej „ogólna” wersja (?), Która nie dopuszcza żadnych liter angielskich jako znaków specjalnych .
źródło
Zaimportuj plik JavaScript
jquery.validate.min.js
.Możesz użyć tej metody:
źródło
Spróbuj tego:
Wyrażenie:
Opcjonalne znaki specjalne:
Wyrażenie:
Jeśli warunek minimalny i maksymalny nie jest wymagany, usuń go
.{6, 16}
źródło
Nie odpowiada bezpośrednio na pytanie, ale czy naprawdę musi to być wyrażenie regularne?
Robiłem dużo Perla i przyzwyczaiłem się do rozwiązywania problemów z wyrażeniami regularnymi. Jednak gdy stają się bardziej skomplikowane ze względu na wszystkie przewidywania i inne dziwactwa, musisz napisać dziesiątki testów jednostkowych, aby zabić wszystkie te małe błędy.
Co więcej, wyrażenie regularne jest zazwyczaj kilka razy wolniejsze niż rozwiązanie imperatywne lub funkcjonalne.
Na przykład następująca (niezbyt FP) funkcja Scala rozwiązuje oryginalne pytanie około trzy razy szybciej niż regex najpopularniejszej odpowiedzi. To, co robi, jest tak jasne, że wcale nie potrzebujesz testu jednostkowego:
źródło
Chciałbym odpowiedzieć Peterowi Mortensenowi, ale nie mam wystarczającej reputacji.
Jego wyrażenia są idealne dla każdego z określonych wymagań minimalnych. Problem z jego wyrażeniami, które nie wymagają znaków specjalnych, polega na tym, że NIE ZEZWALAJĄ także na znaki specjalne, dlatego też egzekwują maksymalne wymagania, których, jak sądzę, nie wymagał OP. Zwykle chcesz pozwolić swoim użytkownikom ustawić hasło tak silne, jak chcą; po co ograniczać silne hasła?
Zatem jego wyrażenie „co najmniej osiem znaków, co najmniej jedna litera i jedna cyfra”:
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$
spełnia minimalne wymagania, ale pozostałe znaki mogą być tylko literą i cyframi. Aby zezwolić (ale nie wymagać) znaków specjalnych, należy użyć czegoś takiego:
^(?=.*[A-Za-z])(?=.*\d).{8,}$
aby umożliwić dowolne postacielub
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$
aby umożliwić określone znaki specjalnePodobnie „co najmniej osiem znaków, co najmniej jedna wielka litera, jedna mała litera i jedna cyfra:”
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
spełnia to minimalne wymaganie, ale dopuszcza tylko litery i cyfry. Posługiwać się:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
aby umożliwić dowolne postacielub
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,}
aby umożliwić określone znaki specjalne.źródło
źródło
|{}:;<>/])[A-Za-z\d$@$!%*?&+~
| {}:; <> /] {8,15}, które będą zawierać następujące znaki niealfanumeryczne: (@ $!% *? & + ~ `| {}Co powiesz na rozważenie następującego rozwiązania wyrażenia regularnego:
^(?=.*[\w])(?=.*[\W])[\w\W]{8,}$
Który potwierdza następujące:
Sprawdź to, pracując pod następującym linkiem https://regex101.com/r/qPmC06/4/
źródło
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W\_])[A-Za-z\d\W\_]{8,}$
?W zależności od potrzeb wzór ten powinien działać dobrze. Spróbuj tego,
Po prostu utwórz zmienną łańcuchową, przypisz wzór i utwórz metodę logiczną, która zwraca true, jeśli wzór jest poprawny, w przeciwnym razie false.
Próba:
źródło
Znalazłem tutaj wiele problemów, więc zrobiłem własny.
Oto wszystko w pełnej krasie dzięki testom:
https://regex101.com/r/DCRR65/4/tests
Na co zwrócić uwagę:
\w
ponieważ to obejmuje_
, dla których testuję.źródło
źródło
@ClasG zasugerował już :
ale nie akceptuje _ (podkreślenia) jako znaku specjalnego (np. Aa12345_).
Ulepszony to:
źródło
Próbny:
źródło
Testowanie tego w 2020 roku:
Sprawdź siebie
źródło
źródło
Po prostu możemy to zrobić za pomocą HTML5.
Użyj poniższego kodu w atrybucie wzorca,
Będzie działać idealnie.
źródło
Możesz użyć poniższego wzorca wyrażeń regularnych, aby sprawdzić, czy hasło odpowiada Twoim oczekiwaniom.
źródło
Link sprawdzić online https://regex101.com/r/mqGurh/1
źródło
Użyj tego,
Sprawdza poprawność co najmniej jednej małej litery, jednej dużej litery, jednej liczby i specjalnych znaków (!, @, #, $,%,?, =, *, &).
Minimalna długość to 8, a maksymalna to 20
źródło
W Javie / Androidzie, aby przetestować hasło z co najmniej jedną cyfrą, jedną literą i jednym znakiem specjalnym według następującego wzoru:
źródło
Spróbuj tego:
To wyrażenie regularne działa dla mnie idealnie.
źródło
Wzór do dopasowania co najmniej 1 wielkiej litery, 1 cyfry i dowolnych znaków specjalnych oraz długości od 8 do 63.
„^ (? =. [az]) (? =. [AZ]) (? =. * \ d) [a-zA-Z \ d \ W] {8,63} $”
Ten wzorzec wykorzystano do programowania JAVA.
źródło
Mam nadzieję, że poniżej działa. Próbowałem tego w niestandardowych zasadach platformy Azure.
^ (? =. [az]) (? =. [AZ]) (? =. \ d) (? =. [@ # $% ^ & * -_ + = [] {} | \: ',? /
~"();!])([A-Za-z\d@#$%^&*\-_+=[\]{}|\\:',?/
~ "() ;!] |. (?! @)) {6,16} $źródło
Właśnie skopiowałem pierwszą odpowiedź tutaj i przekształciłem ją w bardziej wygodny dla użytkownika regex, który wymaga jednej górnej, jednej dolnej i co najmniej 8 znaków, ale akceptuje wszystko „pomiędzy”.
Ten jest przykładem wyrażenia regularnego wymagającego
WAŻNE : Wyrażenie regularne będzie również oprócz wszystkich innych znaków, np. Liczb, znaków specjalnych, takich jak $, # ,! itd. - o ile reguły 1. do 3. odpowiadają ciągowi wejściowemu
Pamiętaj o „.” alomst na końcu wyrażenia regularnego. Będzie pasować do prawie każdego (i afaik dowolnego czytelnego) znaku
źródło
Jeśli chcesz użyć wyrażeń regularnych do sprawdzenia co najmniej ośmiu znaków, co najmniej jednej dużej litery, co najmniej jednej małej litery, co najmniej jednej cyfry od 0 do 9 i co najmniej jednego znaku specjalnego z:! @ # $% ^ I * _? ORAZ daj użytkownikowi nieco więcej informacji o tym, czego brakuje w haśle, możesz użyć następującego kodu:
źródło
Rozwiązanie znalazłem w jednej z poprzednich odpowiedzi jako:
* Minimum 8 znaków co najmniej 1 wielki alfabet, 1 mały alfabet, 1 liczba i 1 znak specjalny:
... nie działało dla mnie, ale poniższa wersja jest uproszczona i działa świetnie (dodaj dowolny znak specjalny, który ci się podoba, dodałem tutaj #) i dodaj regułę liczbową, tak jak robisz to z literami:
źródło