2010-03-03 21 views
23

może mi pomóc w tworzeniu wyrażeń regularnych do sprawdzania poprawności haseł.Wyrażenie regularne do sprawdzania haseł

warunek jest „Hasło musi zawierać 8 znaków i co najmniej jedną cyfrę, jedną literę i jeden unikalny charakter takich jak !#$%&? "

+0

Zasady dotyczące hasła są złe. Aby uzyskać więcej informacji, zobacz [Reference - Password Validation] (https://stackoverflow.com/questions/48345922/reference-password-validation). – ctwheels

Odpowiedz

49
^.*(?=.{8,})(?=.*[a-zA-Z])(?=.*\d)(?=.*[!#$%&? "]).*$ 

--- 

^.*    : Start 
(?=.{8,})  : Length 
(?=.*[a-zA-Z]) : Letters 
(?=.*\d)   : Digits 
(?=.*[!#$%&? "]) : Special characters 
.*$    : End 
+0

+1 dla wyjaśnienia - przetestowane z kilkoma przykładami i działa na http://www.regular-expressions.info/javascriptexample.html – amelvin

+0

jestem zmęczony z "acf23! & 7h" i nie zatwierdza go – Andromeda

+0

Nie zapomnij uciec niezbędne postacie ... – Macmade

5

można osiągnąć każdy z indywidualnych wymagań dość łatwo (np minimum 8 znaków : .{8,} będzie pasował do 8 lub więcej znaków)

aby połączyć je można użyć „pozytywny uprzedzona”, aby zastosować wiele sub-wyrażeń do tej samej zawartości Coś (?=.*\d.*).{8,} dopasować jeden (lub więcej) cyfr z uprzedzona, i.. 8 lub więcej znaków:

Więc:

 
(?=.*\d.*)(?=.*[a-zA-Z].*)(?=.*[!#\$%&\?].*).{8,} 

Pamiętając ucieczki meta-znaków.

+1

Masz tam kilka bezsensownych ". *". Możesz użyć: (? =. * \ D) (? =. * [A-zA-Z]) (? =. * [! # \ $% & \?]). {8,} –

+0

@ TomLord Chciałbym przetestować to ... ale możesz mieć rację (powód: oczywiście każdy pozytywny uprzedzający musi tylko potwierdzić aż jedną instancję każdego rodzaju postaci). – Richard

+0

Tak, i główny powód, dla którego to wskazałem, jest taki, że jeśli twoje wyrażenie nie pasuje, to może być znacznie bardziej nieefektywne, aby to ustalić, jeśli dodasz niepotrzebne ".* s tam! –

7

Spróbuj

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).{6,20}) 

Opis powyższego wyrażenia regularnego:

(   # Start of group 
    (?=.*\d)  # must contains one digit from 0-9 
    (?=.*[a-z])  # must contains one lowercase characters 
    (?=.*[\W])  # must contains at least one special character 
       .  #  match anything with previous condition checking 
       {8,20} #  length at least 8 characters and maximum of 20 
)   # End of group 

„/ W” zwiększy zakres znaków, które mogą być wykorzystane do dołu i hasło mogą być bardziej bezpieczne.

+0

Dlaczego potrzebujesz wszystkich (. *)? Wydaje się działać dobrze, jeśli po prostu: (? = \ d *) (? = [az] *) (? = [AZ ] *) (? = [\ W] *). {6,20} –

1

Możesz utworzyć własne wyrażenie regularne dla walidacji javascript;

 (/^ 
     (?=.*\d)    //should contain at least one digit 
     (?=.*[a-z])    //should contain at least one lower case 
     (?=.*[A-Z])    //should contain at least one upper case 
     [a-zA-Z0-9]{8,}   //should contain at least 8 from the mentioned characters 

     $/) 

przykład: - /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{7,}$/

4

Hasło z następujących warunków:

  1. Przynajmniej 1 cyfra
  2. Przynajmniej 2 znaki specjalne
  3. przynajmniej 1 znak alfabetu
  4. Brak pustego miejsca

    'use strict'; 
    (function() { 
        var foo = '3g^g$'; 
    
        console.log(/^(?=.*\d)(?=(.*\W){2})(?=.*[a-zA-Z])(?!.*\s).{1,15}$/.test(foo)); 
    
        /** 
        * (?=.*\d)   should contain at least 1 digit 
        * (?=(.*\W){2}) should contain at least 2 special characters 
        * (?=.*[a-zA-Z]) should contain at least 1 alphabetic character 
        * (?!.*\s)   should not contain any blank space 
        */ 
    })();