Espressione regolare per assicurarsi che la stringa contenga almeno un minuscolo char, il maiuscolo char, cifre e simboli

Qual è la regex per assicurarsi che una data stringa contiene almeno un carattere da ciascuna delle seguenti categorie.

  • Carattere minuscolo
  • Carattere maiuscolo
  • Cifra
  • Simbolo

So i motivi per i singoli insiemi cioè [a-z], [A-Z], \d e _|[^\w] (li ho corretto, eh?).

Ma come faccio a combinare in modo da assicurarsi che la stringa contiene tutti questi in qualsiasi ordine?

  • Quale piattaforma/regex-dialetto? Bart risposta è giusta, ma lookahead affermazioni non sono affidabili in JavaScript, per esempio.
  • Nessun posto in particolare, io sto imparando regex. C’è un’alternativa che può essere utilizzato in javascript?
  • Ehi, sto cercando di scoprire perché lookahead affermazioni non sono affidabili in Javascript. C’è un articolo su questo?
  • C’è davvero fonte di confusione IE/JScript bug: blog.stevenlevithan.com/archives/regex-lookahead-bug
InformationsquelleAutor Amarghosh | 2009-10-13



3 Replies
  1. 313

    Se avete bisogno di un singolo regex, provare:

    (?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W)

    Una breve spiegazione:

    (?=.*[a-z])        //use positive look ahead to see if at least one lower case letter exists
    (?=.*[A-Z])        //use positive look ahead to see if at least one upper case letter exists
    (?=.*\d)           //use positive look ahead to see if at least one digit exists
    (?=.*\W])        //use positive look ahead to see if at least one non-word character exists

    E sono d’accordo con SilentGhost, \W potrebbe essere un po ‘ ampio. Mi piacerebbe sostituirlo con un set di caratteri come questo: [[email protected]#$%^&*.,?] (sentitevi liberi di aggiungere più ovviamente!!!)

    • Che cosa accadrebbe se cambiare l’ultimo .+ in .*? Io non riuscivo a venire con un caso di test che non riesce con .*. Sono essi stessi in questo contesto? “Zero o più caratteri” sembra essere bello, sembra di essere in cerca di conferme.
    • in questo caso, non fa differenza. A causa del positivo e guardare anticipata, la stringa contiene già almeno 4 caratteri. Così non fa alcuna differenza per cambiare .+ in .* o anche .{4,} per quella materia.
    • Se sei disposto ad aggiungere un po ‘ di spiegazione, sto avendo difficoltà a capire come la combinazione di questi lookaheads garantisce almeno 1 per ogni set di caratteri sarà presente
    • Non so come riformulare in modo da rendere più facile la comprensione. Soprattutto in questi piccoli commento-caselle. Vi consiglio di leggere questo: regular-expressions.info/lookaround.html e se avete ancora domande, basta inviare una domanda di il tuo. Buona fortuna!
    • Cosa succede se non si desidera alcun simbolo? rimozione (?=.*[_\W]) non funziona regex101.com/r/jH9rK1/1
    • provare qualcosa di simile a questo: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?!.*[&%$]).{6,}$
    • Grazie,è possibile ottenere un simile regex con un minimo di conte. es: 2 lettere maiuscole, 2 minuscole, 2 numerico & specifiche di carattere speciale (%aAa1A2$) dovrebbe essere valido. ci dispiace, Provato molte soluzione, ma non in grado di raggiungere.. ho provato le seguenti modificato RegEx di tuo ^(?=.*[a-z]{2})(?=.*[A-Z]{2})(?=.*\d{2})(?=.*([%]{2})).{8,10}$.
    • Come fare un rigoroso controllo per ciascuno dei sopra insieme con la condizione che un alfabeto dovrebbe essere l’inizio seguita da un numero che termina con un carattere speciale, infine,?
    • i commenti non sono molto adatti per chiedere (o rispondere alle domande. Sentitevi liberi di creare una domanda di il tuo.
    • Nel mio caso era atlest 1 inferiore, atleast 1 superiore, almeno 1 digit 1 simbolo e lunghezza min 8. (?=.*[a-z])(?=.*[A-Z])(?=.*(\d|\W)).{8,}

  2. 14

    Bart Kiers, la tua regex ha un paio di problemi. Il modo migliore per farlo è questo:

    (.*[a-z].*)       //For lower cases
    (.*[A-Z].*)       //For upper cases
    (.*\d.*)          //For digits

    In questo modo si sta cercando, non importa se all’inizio, alla fine o a metà. Nel tuo ho un sacco di problemi con le password complesse.

    • Non stai controllando per i simboli come l’OP richiesto.
  3. 5

    Si può abbinare questi tre gruppi separatamente, e assicurarsi che tutti i presenti. Inoltre, [^\w] sembra un po ‘ troppo ampia, ma se è quello che si desidera, si potrebbe desiderare di sostituire con \W.

    • Grazie. Non ero a conoscenza di \W. Appena guardato per scoprire che le partite Non di Parola. C’è qualche differenza tra \W e [\W]? È [\W] solo ridondante?
    • sì, \W e [\W] determinare le stesse.

Lascia un commento