2016-09-25 4 views
0

Das Passwort-Checker-Programm soll die Benutzereingabe eines Benutzernamens und eines Passworts übernehmen und ausgeben, ob das Passwort gültig oder ungültig ist.Java Password Pattern

Ich habe versucht, Regex dafür zu verwenden, aber habe ein Problem. Das Muster funktioniert für alle meine Regeln, nur für eine, die Benutzernamenregel. Gibt es auch eine Möglichkeit, die Ausgabe von "True" oder "False" zu etwas Brauchbarem zu ändern?

Mein Code so weit:

import java.util.regex.*; 
import java.util.Scanner; 

public class validPassword { 
    private static Scanner scnr; 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     // Variable Management 
     String un, pw, req; // Variable Variable 

     System.out.println("Please enter a username: "); 
     // ^Need to implement so if it matches the password it's invalid^ 
      un = input.nextLine(); // Gathers user's username input 
     System.out.println("Please enter a password: "); 
      pw = input.nextLine(); // Gathers user's password input 

     req = "(?=.*[0-9])(?=.*[a-zA-Z]).{8,}"; 
     System.out.println(pw.matches(req)); // Can I customize the output? 
    } 

} 

schätze ich jede Hilfe! :)

+0

Sie wissen, dass mit Ihrem zuletzt Sie die Bedeutung geändert von „Zahlen, Kleinbuchstaben und Großbuchstaben enthalten muss“ „enthalten muss Zahlen und Kleinbuchstaben ** oder ** Großbuchstaben "? Es ist jetzt in Ordnung, nur Kleinbuchstaben und Großbuchstaben zu haben. Und warst du es, der meine Antwort aufgehoben hat? Wenn ja warum? – Vampire

Antwort

1

Sie sollten in der Lage sein, zunächst zu überprüfen, ob es diese Untersequenz hat. Ich würde das zuerst überprüfen, dann überprüfen Sie Ihre Passwortregeln. So etwas wie diese (mit einem regex):

// get username and password 
if(pw.matches(".*"+Pattern.quote(un)+".*")){ 
    System.out.println("Password can't have username in it..."); 
} 
// make sure password follows rules... 

Besser wäre es, die contains Methode auf Strings zu verwenden (docs).

if (pw.contains(un)) {...} 

Soweit das Anpassen der Ausgabe von matches können Sie nicht. Sie müssen sich bedingt verzweigen und etwas anderes tun.

+0

Ich versuchte meine eigene if-Anweisung früher und es hat nicht funktioniert, ich schaute zurück und bemerkte, dass es ein paar logische Fehler gab. – Aramza

+0

Gut, hoffentlich kannst du sie ausarbeiten^_ ^ –

0

Für den Benutzernamen überprüfen Sie die Regex

"(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])((?<!" + Pattern.quote(un) + ").(?!" + Pattern.quote(un) + ")){8,}" 

zu

ändern können, die mindestens acht beliebige Zeichen bedeutet, die durch den Benutzernamen nicht gefolgt oder vorangestellt werden. Dies ist mit negativem Lookbehind und negativem Lookahead genauso wie mit dem positiven Lookahead für die Anforderung, dass die drei Characterclasses enthalten sind.

Und in Bezug auf die individuelle Leistung, verwenden Sie einfach einen ternären Ausdruck:

System.out.println(pw.matches(req) ? "yehaw" : "buuuuuh")