Avatar billede usse Nybegynder
04. juni 2007 - 19:26 Der er 11 kommentarer og
1 løsning

RegEx password

Jeg har følgende problem, hvordan tjekker jeg om et password indeholder følgende: min, max længde, kun tal og bogstaver, skal mindst indeholde et tal samt et stort bogstav ?
Avatar billede arne_v Ekspert
04. juni 2007 - 20:05 #1
Hvis du saa bort fra det sidste ville det vaer enemt med regex.

Men med det sidste ville jeg nok droppe regex og loebe gennem strengen.
Avatar billede usse Nybegynder
04. juni 2007 - 20:07 #2
ok hvad så uden :)
Avatar billede _carsten Nybegynder
04. juni 2007 - 20:47 #3
Et forslag.

public class NewMain6 {
   
    /** Creates a new instance of NewMain6 */
    public NewMain6() {
    }
   
    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
        System.out.println(checkPassword("asd2Dfg"));
        System.out.println(checkPassword("sd2Dfg"));
        System.out.println(checkPassword("asd2dfg"));
        System.out.println(checkPassword(""));
    }
   
    private static boolean checkPassword(String pWord){
        int min = 0, max = 6;
        boolean isNumber = false, isCapital = false;

        char[] c = pWord.toCharArray();
        if(c.length >= min && c.length <= max){
            for (int i = 0; i < c.length; i++) {
                if(Character.isDigit(c[i]))
                    isNumber = true;

                if(Character.isUpperCase(c[i]))
                    isCapital = true;
            }

            if(isNumber && isCapital)
                return true;
        }
        return false;
    }
}
Avatar billede usse Nybegynder
04. juni 2007 - 21:29 #4
Ja det er umiddelbart den eneste løsning, men jeg leder også efter hvordan man kan definere ud fra et regex. Altså hvordan kan man definere at strengen skal mindt indeholde et tal feks. ?
Avatar billede jakoba Nybegynder
05. juni 2007 - 06:57 #5
Java regular expressions bliver precompileret, så hvorfor ikke bare bruge 2 eller flere simple og overskuelige regular expressions

  "^[a-zA-Z0-9]{6,10}$"      mindst 6 og højest 10 bogstaver og cifre
  "^\D*\d\w*$"                  mindst et ciffer
  "^[^A-Z]*[A-Z]\w*$"          mindst et stort bogstav

Hvis alle 3 matcher er det et lovligt password format efter de givne regler. Det har så også den fordel at det er nemt at tilføje/fjerne ytderligere regler. fx gætter jeg på du har glemt at nævne at der også SKAL være et lille bogstav i ordet
  "^[^a-z]*[a-z]\w*$"          mindst et lille bogstav

mvh JakobA
Avatar billede jensgram Nybegynder
05. juni 2007 - 09:00 #6
Jakoba > Hvis _alle_ 4 skal matche, så kan de vel gøres simplere:

"^[a-zA-Z0-9]{6,10}$"
"\d"
"[a-z]"
"[A-Z]"

For, hvis der er 6-10 tegn OG mindst et tal OG mindst et småt bogstav OG mindst en kapitalær, så er det vel nok?
Avatar billede usse Nybegynder
05. juni 2007 - 23:48 #7
Tusind tak for hjælpen folkens... smid gerne et svar
Avatar billede arne_v Ekspert
06. juni 2007 - 04:20 #8
jeg frafalder
Avatar billede _carsten Nybegynder
06. juni 2007 - 16:55 #9
Lige så her, fornemmer det mere er regular exp. du går efter
Avatar billede jensgram Nybegynder
06. juni 2007 - 17:21 #10
Ja, jeg skal de ihvertfald heller ikke :)
Avatar billede jakoba Nybegynder
07. juni 2007 - 00:07 #11
Altid grådig :-)

PS. jensgram har helt ret, hans modifikation er enklere og hurtigere.
Avatar billede jakoba Nybegynder
07. juni 2007 - 00:13 #12
ups
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester