Regex voor wachtwoord moet minimaal acht tekens, minimaal één cijfer en zowel kleine als hoofdletters en speciale tekens bevatten

Ik wil een reguliere expressie om dat te controleren:

Een wachtwoord bevat ten minste acht tekens, waaronder ten minste één cijfer en bevat zowel kleine als hoofdletters en speciale tekens, bijvoorbeeld #, ?, !.

Het mag niet uw oude wachtwoord zijn of uw gebruikersnaam, "password"of "websitename"

bevatten

En hier is mijn validatie-expressie voor acht tekens, waaronder één hoofdletter, één kleine letter en één cijfer of speciaal teken.

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

Hoe kan ik het schrijven voor een wachtwoord moet acht tekens bevatten, inclusief één hoofdletter, één speciaal teken en alfanumerieke tekens?


Antwoord 1, autoriteit 100%

Minimaal acht tekens, minimaal één letter en één cijfer:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

Minimaal acht tekens, minimaal één letter, één cijfer en één speciaal teken:

"^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$"

Minimaal acht tekens, minimaal één hoofdletter, één kleine letter en één cijfer:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

Minimaal acht tekens, minimaal één hoofdletter, één kleine letter, één cijfer en één speciaal teken:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"

Minimaal acht en maximaal 10 tekens, minimaal één hoofdletter, één kleine letter, één cijfer en één speciaal teken:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"

Antwoord 2, autoriteit 35%

Je mag deze regex gebruiken met meerdere vooruitblikkende beweringen (voorwaarden):

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$

Deze regex zal deze regels afdwingen:

  • Minstens één hoofdletter Engelse letter, (?=.*?[a-z])
  • Minstens één kleine Engelse letter, (?=.*?[a-z])
  • Minstens één cijfer, (?=.*?[0-9])
  • Minstens één speciaal teken, (?=.*?[#?!@$%^&*-])
  • Minimaal acht in lengte .{8,}(met de ankers)

Antwoord 3, autoriteit 6%

Reguliere expressies hebben geen AND-operator, dus het is vrij moeilijk om een regex te schrijven die overeenkomt met geldige wachtwoorden, wanneer geldigheid wordt gedefinieerd door iets AND iets anders EN iets anders…

Maar reguliere expressies hebben wel een OR-operator, dus pas gewoon de stelling van DeMorgan toe en schrijf een regex die overeenkomt met ongeldige wachtwoorden:

Alles met minder dan acht tekens OFalles zonder cijfers OFalles zonder hoofdletters OFof iets zonder kleine letters OF alles zonder speciale tekens.

Dus:

^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

Als iets daarmee overeenkomt, is het een ongeldig wachtwoord.


Antwoord 4, autoriteit 2%

Een kleine verbetering voor het antwoord van @anubhava: aangezien speciale tekens beperkt zijn tot die op het toetsenbord, gebruik dit voor elk speciaal teken:

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

Deze regex zal deze regels afdwingen:

  • Minstens één Engelse hoofdletter
  • Minstens één kleine Engelse letter
  • Minstens één cijfer
  • Minstens één speciaal teken
  • Minimaal acht lang

Antwoord 5, autoriteit 2%

Gebruik de volgende Regex om aan de onderstaande voorwaarden te voldoen:

Voorwaarden:

  1. Min 1 hoofdletter.
  2. Min. 1 kleine letter.
  3. Min 1 speciaal teken.
  4. Min. 1 nummer.
  5. Minimaal 8 tekens.
  6. Max 30 tekens.

Regex:

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/

Antwoord 6, autoriteit 2%

Ik had wat moeite om het meest populaire antwoord voor mijn omstandigheden te volgen. Mijn validatie mislukte bijvoorbeeld met tekens zoals ;of [. Ik was niet geïnteresseerd in het op de witte lijst zetten van mijn speciale tekens, dus gebruikte ik in plaats daarvan [^\w\s]als een test – simpel gezegd – om niet-woordtekens (inclusief numerieke) en niet-witruimtetekens te matchen . Om samen te vatten, hier is wat voor mij werkte…

  • minstens 8tekens
  • minstens 1numeriek teken
  • minstens 1kleine letter
  • minstens 1hoofdletter
  • minstens 1speciaal teken

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/

JSFiddle Link– eenvoudige demo voor verschillende gevallen


Antwoord 7

Een meer “algemene” versie(?), waarin geen Engelse letters als speciale tekenszijn toegestaan.

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

var pwdList = [
    '@@V4-\3Z`zTzM{>k',
    '12qw!"QW12',
    '123qweASD!"#',
    '1qA!"#$%&',
    'Günther32',
    '123456789',
    'qweASD123',
    'qweqQWEQWEqw',
    '12qwAS!'
  ],
  re = /^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$/;
  pwdList.forEach(function (pw) {
    document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>');
  });

Antwoord 8

Ik zou Peter Mortensen willen antwoorden, maar ik heb niet genoeg reputatie.

Zijn uitdrukkingen zijn perfect voor elk van de gespecificeerde minimumvereisten. Het probleem met zijn uitdrukkingen die geen speciale tekens vereisen, is dat ze ook geen speciale tekens TOESTAAN, dus ze dwingen ook maximale vereisten af, wat volgens mij niet door het OP is gevraagd. Normaal gesproken wil je dat je gebruikers hun wachtwoord zo sterk kunnen maken als ze willen; waarom sterke wachtwoorden beperken?

Dus zijn uitdrukking “minimaal acht tekens, ten minste één letter en één cijfer”:

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$

voldoet aan de minimumvereiste, maar de overige tekens mogen alleenletters en cijfers zijn. Om speciale tekens toe te staan (maar niet te vereisen), moet je zoiets gebruiken als:

^(?=.*[A-Za-z])(?=.*\d).{8,}$om alle tekens toe te staan

of

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$om specifieke speciale tekens toe te staan

Evenzo, “minimaal acht tekens, ten minste één hoofdletter, één kleine letter en één cijfer:”

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

voldoet aan die minimumvereiste, maar alleenstaat letters en cijfers toe. Gebruik:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$om alle tekens toe te staan

of

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,}om specifieke speciale tekens toe te staan.


Antwoord 9

Importeer het JavaScript-bestand jquery.validate.min.js.

U kunt deze methode gebruiken:

$.validator.addMethod("pwcheck", function (value) {
    return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});
  1. Ten minste één hoofdletters Engelse letter
  2. Ten minste één kleine letter
  3. ten minste één cijfer
  4. ten minste één speciaal teken

Antwoord 10

Probeer deze:

  1. minimaal zes tekens
  2. ten minste één hoofdletters
  3. ten minste één kleine letters
  4. ten minste één speciaal teken

expressie:

"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"

Optionele speciale tekens:

  1. ten minste één speciaal teken
  2. ten minste één cijfer
  3. Speciale tekens zijn optioneel
  4. minimaal zes tekens en maximaal 16 tekens

expressie:

"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"

Als de MIN- en MAX-voorwaarde niet vereist is, verwijdert u vervolgens .{6, 16}

  • 6 is een minimale tekenlimiet
  • 20 is maximale tekenlimiet
  • ? = middelen match expressie

Antwoord 11

Hoe zit het met het overwegen van de volgende regexoplossing:

^(?=.*[\w])(?=.*[\W])[\w\W]{8,}$

die het volgende valideert:

  1. ten minste één kleine letters
  2. ten minste één hoofdletter
  3. ten minste één cijfer
  4. ten minste één speciaal teken
  5. het zou tenminste 8 tekens lang moeten hebben.

Bekijk het werken op de volgende link https://regex101.com/r/qpmc06/4 /


Antwoord 12

Dit werkte voor mij:

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@$!%*?&])([a-zA-Z0-9@$!%*?&]{8,})$
  • ten minste 8 tekens lang;
  • één kleine letters, één hoofdletters, één nummer en één speciaal teken;
  • geen witvakken.

Antwoord 13

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*()_+,.\\\/;':"-]).{8,}$

Antwoord 14

de vraag niet rechtstreeks beantwoorden, maar moet het echt een regex zijn?

Ik droeg veel perl en werd gewend aan het oplossen van problemen met regoxes. Wanneer ze echter gecompliceerder worden met alle kijkbeurten en andere eigenaardigheden, moet u tientallen eenheidstests schrijven om al die kleine bugs te doden.

Bovendien is een regex typisch een paar keer langzamer dan een imperatief of een functionele oplossing.

Bijvoorbeeld, de volgende (niet erg FP) Scala-functie lost de oorspronkelijke vraag ongeveer drie keer sneller op dan de regex van het populairste antwoord. Wat het wel doet is ook zo duidelijk dat u helemaal geen eenheidstest nodig hebt:

def validatePassword(password: String): Boolean = {
  if (password.length < 8)
    return false
  var lower = false
  var upper = false
  var numbers = false
  var special = false
  password.foreach { c =>
    if (c.isDigit)       numbers = true
    else if (c.isLower)  lower = true
    else if (c.isUpper)  upper = true
    else                 special = true
  }
  lower && upper && numbers && special
}

Antwoord 15

/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*$/

Dit is de eenvoudige manier om het te gebruiken terwijl je tenminste 1 hoofdletters 1 kleine letters en 1 cijfer

En dit is het voorbeeld terwijl ik gebruik in Express-validatie

check('password')
    .notEmpty()
    .withMessage('Password cannot be null')
    .bail()
    .isLength({ min: 6 })
    .withMessage('Password must be at least 6 characters')
    .bail()
    .matches(/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*$/)
    .withMessage(
      'Must have atleast 1 uppercase, 1 lowercase letter and 1 number'
    ),

Antwoord 16

Volgens uw behoefte moet dit patroon prima werken. Probeer dit,

^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}

Maak gewoon een tekenreeksvariabele, wijs het patroon toe en maak een Booleaanse methode die TRUE reteert als het patroon correct is, anders onwaar.

Sample:

String pattern = "^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}";
String password_string = "Type the password here"
private boolean isValidPassword(String password_string) {
    return password_string.matches(Constants.passwordPattern);
}

Antwoord 17

Ik heb hier veel problemen gevonden, dus ik heb het mijne gemaakt.

Hier is het in al het is glorie, met tests:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$

https://regex101.com/r/dcrr65/4/tests

Dingen om op te letten:

  1. Gebruikt niet \womdat dat _bevat, waar ik op test.
  2. Ik heb veel problemen bij elkaar passende symbolen gehad, zonder het einde van de regel te matchen.
  3. Geeft geen specifiek symbolen op, dit komt ook omdat verschillende localen verschillende symbolen hebben op hun toetsenborden die ze misschien willen gebruiken.

Antwoord 18

Demo:

function password_check() {
  pass = document.getElementById("password").value;
  console.log(pass);
  regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
  if (regex.exec(pass) == null) {
    alert('invalid password!')
  }
  else {
    console.log("valid");
  }
}
<input type="text" id="password" value="Sample@1">
<input type="button" id="submit" onclick="password_check()" value="submit">

Antwoord 19

deze in 2020 testen:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

Controleer jezelf

const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
const str = `some12*Nuts`;
let m;
if ((m = regex.exec(str)) !== null) {
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

Antwoord 20

pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"

Antwoord 21

var strongRegex = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})");
var mediumRegex = new RegExp("^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})");

Beste voor javascript


Antwoord 22

(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}

Antwoord 23

@ClasG heeft al gesuggereerd:

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

maar het accepteert geen _(underscore) als een speciaal teken (bijv. Aa12345_).

Een verbeterde is:

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*([^\w\s]|[_]))\S{8,}$

Antwoord 24

Voor standaard wachtwoordvereisten vond ik dit nuttig:

  • Minstens 1 alfabet

  • Minstens 1 cijfer

  • Bevat geen spatie

  • Optionele speciale tekens, bijv. @$!%*#?&^_-

  • Minimaal 8 tekens lang

    /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&^_-]{8,}$/

U kunt ook de bovengrens instellen, bijvoorbeeld {8,32} tot 32 tekens lang.


Antwoord 25

Gebruik de volgende Regex om aan de onderstaande voorwaarden te voldoen:

Conditions: 1] Min 1 special character.
            2] Min 1 number.
            3] Min 8 characters or More

Regex: ^(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,}$

Kan online testen: https://regex101.com


Antwoord 26

We kunnen dit alleen doen door HTML5 te gebruiken.

Gebruik onderstaande code in patroonkenmerk,

pattern="(?=^.{8,}$)((?=.*\d)(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

Het zal perfect werken.


Antwoord 27

U kunt het onderstaande reguliere expressiepatroon gebruiken om te controleren of het wachtwoord aan uw verwachtingen voldoet of niet.

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20})

Antwoord 28

(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

Linkcontrole online https://regex101.com/r/mqGurh/1


Antwoord 29

Ik heb zojuist het eerste antwoord hier gekopieerd en er een meer ux-convenient regexvan gemaakt die één bovenste, één onderste en minstens 8 tekens nodig heeft, maar alles “tussenin” accepteert.

Dit is een voorbeeld-regex waarvoor

  1. minstens 8 tekens lang
  2. minstens één kleine letter
  3. minstens één hoofdletter

BELANGRIJK: deze regex zal ook alle andere tekens uitsluiten, b.v. cijfers, speciale tekens zoals $,#,! enz.– zolang de regels 1. tot 3. overeenkomen met de invoerreeks

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

Let op de “.” bijna aan het einde van de regex. Dit komt overeen met bijna elk (en bijna elk leesbaar) teken


Antwoord 30

Gebruik dit,

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

Het is geldig voor ten minste één kleine letter, één hoofdletter, één cijfer en de speciale tekens van (!,@,#,$,%,?,=,*,&).

Minimale lengte is 8 en maximale lengte is 20

Other episodes