Wachtwoord moet ten minste één niet-alfa-teken bevatten

Ik heb een reguliere expressie nodig voor een wachtwoord. Het wachtwoord moet minimaal 8 tekens bevatten. Ten minste één teken moet een cijfer of een speciaal teken zijn (geen letter).

[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 8)]
[RegularExpression(@"(?=.*\W)?(?=.*\d)", ErrorMessage = "Error message")]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

Ik heb een lengtevalidatie, maar ik heb hulp nodig met een reguliere expressie die controleert of het wachtwoord ten minste één cijfer of speciaal teken bevat.

Voorbeelden van geldige wachtwoorden:

testtest85*
testtes*
testtes1
test1234*+

Voorbeelden van ongeldige wachtwoorden:

testtest
testabc

Antwoord 1, autoriteit 100%

Gebruik regex-patroon ^(?=.{8})(?=.*[^a-zA-Z])


Uitleg:

^(?=.{8})(?=.*[^a-zA-Z])
│└──┬───┘└──────┬──────┘
│   │           │
│   │           └ string contains some non-letter character
│   │
│   └ string contains at least 8 characters
│
└ begining of line/string

Als je ook de maximale lengte (laten we zeggen 16)wilt beperken, gebruik dan een regex-patroon:

^(?=.{8,16}$)(?=.*[^a-zA-Z])

Antwoord 2, autoriteit 7%

Voer het door een vrij eenvoudige regex: [^a-zA-Z]

En controleer dan apart de lengte:

if(string.Length > 7)

Antwoord 3, autoriteit 4%

Een eenvoudige methode ziet er als volgt uit:

Match match1 = Regex.Match(<input_string>, @"(?=.{7})");   

match1.Success zorgt ervoor dat er minimaal 8 karakters zijn.

Match match2 = Regex.Match(<input_string>, [^a-zA-Z]);

match2.Success zorgt ervoor dat er ten minste één speciaal teken of cijfer in de tekenreeks staat.

So, match1.Success && match2.Success guarantees will get what you want.

Antwoord 4

Ik heb het voorbeeld van Omega geprobeerd, maar het werkte niet met mijn C#-code. Ik raad aan om dit in plaats daarvan te gebruiken:

[RegularExpression(@"^(?=[^\d_].*?\d)\w(\w|[!@#$%]){7,20}", ErrorMessage = @"Error. Password must have one capital, one special character and one numerical character. It can not start with a special character or a digit.")]

Antwoord 5

Een uitdrukking als deze:

[a-zA-Z]*[0-9\+\*][a-zA-Z0-9\+\*]*

zou prima moeten werken (voeg uiteraard extra speciale tekens in die u wilt toestaan of gebruik de operator ^ om alles te matchen behalve letters/cijfers); het is niet nodig om ingewikkelde zoekacties te gebruiken. Deze benadering is logisch als u alleen een bepaalde subset van speciale tekens wilt toestaan waarvan u weet dat ze “veilig” zijn en alle andere wilt verbieden.

Als je alle speciale tekens wilt opnemen, behalve bepaalde waarvan je weet dat ze “onveilig” zijn, dan is het logisch om zoiets te gebruiken als:

\w[^\\]*[^a-zA-Z\\][^\\]*

In dit geval staat u expliciet geen backslashes in uw wachtwoord toe en staat u anders elke combinatie met ten minste één niet-alfabetisch teken toe.

De bovenstaande uitdrukking komt overeen met elke tekenreeks die letters en ten minste één cijfer of +,* bevat. Wat betreft de “lengte van 8”-vereiste, er is echt geen reden om dat te controleren met regex.


Antwoord 6

 function randomPassword(length) {
        var chars = "abcdefghijklmnopqrstuvwxyz#$%ABCDEFGHIJKLMNOP1234567890";
        var pass = "";
        for (var x = 0; x < length; x++) {
            var i = Math.floor(Math.random() * chars.length);
            pass += chars.charAt(i);
        }
        var pattern = false;
        var passwordpattern = new RegExp("[^a-zA-Z0-9+]+[0-9+]+[A-Z+]+[a-z+]");
        pattern = passwordpattern.test(pass);
        if (pattern == true)
            { alert(pass); }
        else
         { randomPassword(length); }
    }

probeer dit om het willekeurige wachtwoord met ten minste één speciaal teken te maken

Other episodes