`` `Regex
^(? =.*[A-Z]) (? =.*[A-Z]) (? =.*\ D) (? =.*[!@#$%^&*() _+{} \ [\] :; <>,.? ~ \/-]). {8,} $ $
`` `
Här är en uppdelning av regexen och hur det uppfyller kraven:
* `^`:Matchar strängens början.
* `(? =.* [A-Z])`: Positiv lookahead - Säkerställer att det finns minst ett små bokstäver (`[A-Z]`). `.*` Matchar alla karaktärer (utom NewLine) noll eller fler gånger, så det säger i huvudsak "någonstans i strängen måste det finnas en små bokstäver". Lookahead * konsumerar inte * några karaktärer; Det kontrollerar bara ett tillstånd.
* `(? =.* [A-Z])`: Positiv lookahead - Säkerställer att det finns minst ett versaler (`[A-Z]`).
* `(? =.* \ D)`: Positiv lookahead - säkerställer att det finns minst en siffra (`\ d`).
*`(? =.*[!@#$%^&*() _+{} \ [\]:; <>,.? ~ \\/-])`: Positiv lookahead - Säkerställer att det finns minst en speciell karaktär från listan. Viktigt: Du kan behöva justera karaktärerna inuti fyrkantiga konsoler beroende på vilka karaktärer du anser vara "speciella". Backslash `\` används för att undkomma specialtecken som `-`,` [`,`] `,`/`,`. ', Och `\` så de behandlas bokstavligen. (En dubbel backslash `\\` behövs i många programmeringsspråks stränglitteraler för att representera ett enda bakslag i regex.) Om du vill tillåta fler eller olika specialtecken, ändra denna del i enlighet därmed.
* `. {8,}`:matchar alla tecken (utom NewLine) minst 8 gånger. Detta är huvuddelen som matchar de faktiska lösenordstecken, efter att Lookaheads har bekräftat närvaron av de erforderliga elementen.
* `$`:Matchar slutet på strängen. Detta säkerställer * hela * strängen matchar kriterierna.
Förklaring av lookaheads:
Nyckeln till denna regex är användningen av * positiva lookaheads * (`(? =...)`). Lookaheads tillåter dig att hävda att ett visst mönster finns * utan att faktiskt konsumera * karaktärerna som matchar mönstret. Detta är avgörande eftersom du måste kontrollera om närvaron av olika karaktärstyper (små bokstäver, versaler, siffra, special) oberoende och sedan se till att den totala längden är minst 8.
Hur man använder det (exempel i python):
`` `python
importera
Password_Regex =r "^(? =.*[A-Z]) (? =.*[A-Z]) (? =.*\ D) (? =.*[!@#$%^&*() _+{} \ [\] :; <>,.? ~ \/-]). {8,} $"
def is_valid_password (lösenord):
Return Bool (Re.Match (Password_Regex, Password)))
testfall
lösenord =[
"StrongPass1!", # Giltigt
"WeakPass1", # Ogiltig (ingen versaler)
"WeakPass1", # Ogiltig (ingen liten bokstav)
"StrongPass", # Ogiltig (ingen siffra, special)
"Strngp1", # Ogiltig (för kort)
"StrongPass1", # Ogiltig (ingen speciell)
"StrongPass1", # Ogiltig (inget speciellt utrymme i slutet)
"StrongPass_1", # giltig
"StrongPass.1", # Giltigt
"Strongpass, 1", # giltigt
"StrongPass ~ 1", # giltig
"LongervalidPasswordwith1!", # Giltigt
]
För lösenord i lösenord:
utskrift (f "lösenord:{lösenord}, giltigt:{is_valid_password (lösenord)}")
`` `
Viktiga överväganden:
* Säkerhet: Denna regex är en utgångspunkt, men förlitar sig enbart på regelbundna uttryck för lösenordssäkerhet rekommenderas i allmänhet inte. Överväg att använda etablerade lösenordshash -algoritmer (som Bcrypt, Scrypt eller Argon2) för att lagra lösenord säkert.
* Specialtecken: `[!@#$%^&*() _+{} \ [\] :; <>,.? ~ \\/-]` Del Definierar vad du anser vara en "speciell" karaktär. Justera den så att den matchar önskad teckenuppsättning.
* unicode: Om du behöver stödja Unicode -tecken (t.ex. lösenord med accentuerade bokstäver eller tecken från andra språk), kan du behöva modifiera Regex något (t.ex. med Unicode -teckenklasser som `\ p {ll}` för små bokstäver).
* Komplexitet: Mycket komplexa regelbundna uttryck kan ibland vara ineffektiva. Även om den här i allmänhet är bra för validering av lösenord, tänk på prestanda om du har att göra med en enorm volym lösenord.
* Användarupplevelse: Ge tydliga och användbara felmeddelanden till användare när deras lösenord inte uppfyller kraven. Säg inte bara "ogiltigt lösenord"; Berätta dem exakt vad som saknas.
Denna omfattande förklaring och Python -exemplet bör ge dig en solid förståelse för hur du använder denna regex och hur du anpassar den till dina specifika behov. Kom ihåg att prioritera säkra lösenordshanteringsmetoder.