Visualizzazione dei risultati da 1 a 3 su 3

Discussione: regular expression

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    10

    regular expression

    Ragazzi sono alla disperata ricerca di una regular expression per validare delle stringhe.
    Le stringhe devono essere composta da lettere minuscole (almeno 1) e maiuscole (almeno 1),
    da numeri (almeno 1) e opzionalmente dai seguenti caratteri speciali @!#$%

    girando per la rete ho trovato questa:
    ((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})

    che va quasi bene se non per il fatto che i caratteri speciali sono obbligatori.

    Cioè la regexp deve accettare le stringhe:

    Qwerty1!
    qWerty1!
    1qWeRtY

    ma non stringhe del tipo
    Qwerty1+
    Qwerty1-

    Qualcuno mi sa aiutare?

    Grazie in anticipo a tutti

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: regular expression

    Originariamente inviato da mokup
    Le stringhe devono essere composta da lettere minuscole (almeno 1) e maiuscole (almeno 1),
    da numeri (almeno 1) e opzionalmente dai seguenti caratteri speciali @!#$%
    Generalmente quando si hanno criteri del tipo "almeno n caratteri X e almeno m caratteri Y ecc..." le cose si complicano notevolmente e, al limite, non sono nemmeno realizzabili usando le espressioni regolari.

    Nel tuo caso si può fare con le regex e l'uso dei "lookahead" in effetti aiuta. Ma c'è la questione dei caratteri opzionali.

    Io farei così: i lookahead verificano i criteri stretti "almeno 1 carattere X" mentre con il quantificatore {6,20} potresti controllare che la sequenza si fatta solo dai caratteri "possibili" che comprendono sia quelli richiesti che quelli opzionali. Non accettando quindi altro.

    Provando questo:

    codice:
    public class Prova {
        public static void main(String[] args) {
            String p = "(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[\\da-zA-Z@!#$%]{6,20}";
    
            System.out.println("Qwerty1!".matches(p));
            System.out.println("qWerty1!".matches(p));
            System.out.println("1qWeRtY".matches(p));
            System.out.println("Qwerty1+".matches(p));
            System.out.println("Qwerty1-".matches(p));
        }
    }
    Mi pare che funzioni come volevi. Potrebbe sembrare una ripetizione la classe finale [ ... ] con il quantificatore {6,20} ma in realtà come ho detto sopra serve per indicare ciò che è possibile .... non il criterio "almeno 1 ...".

    Altre soluzioni ora non mi vengono in mente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    10
    Grazie,

    la soluzione sembra funzionare correttamente.

    Gentilissimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.