2016-09-25 3 views
0

Le programme de vérification de mot de passe est supposé prendre l'entrée d'un nom d'utilisateur et d'un mot de passe et indiquer si le mot de passe est valide ou invalide.Mot de passe Java

J'ai essayé d'utiliser regex pour cela mais j'ai un problème. Le modèle fonctionne pour toutes mes règles sauf une, la règle du nom d'utilisateur. En outre, existe-t-il un moyen de changer la sortie de "true" ou "false" en quelque chose de personnalisé?

Mon code à ce jour:

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? 
    } 

} 

Je vous remercie de toute aide! :)

+0

Vous savez que votre dernière modification que vous avez changé le sens de « doit contenir des chiffres, des lettres minuscules et majuscules » à « doit contenir chiffres et minuscules ** ou ** majuscules "? Il est maintenant possible d'avoir uniquement des lettres minuscules et majuscules. Et était-ce toi qui n'a pas mis ma réponse? Si oui, pourquoi? – Vampire

Répondre

1

Vous devriez être capable de vérifier tout d'abord s'il a cette sous-séquence. Je vérifierais d'abord puis vérifier vos règles de mot de passe. donc quelque chose comme ça (en utilisant une expression régulière):

// 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... 

mieux serait d'utiliser la méthode contains sur les chaînes (docs).

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

En ce qui concerne la personnalisation de la sortie de matches, vous ne pouvez pas. Vous devrez vous ramifier de façon conditionnelle et faire quelque chose de différent.

+0

J'ai essayé ma propre déclaration if auparavant et cela n'a pas fonctionné, j'ai regardé par-dessus et j'ai remarqué qu'il y avait quelques erreurs logiques. – Aramza

+0

Bon, j'espère que vous pouvez les résoudre^_ ^ –

0

Pour le nom d'utilisateur, vous pouvez vérifier modifier l'expression régulière à

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

qui signifie au moins 8 caractères arbitraires qui ne sont pas suivis ou précédés par le nom d'utilisateur. C'est avec lookbehind négatif et lookahead négatif, tout comme vous avez utilisé l'idée positive pour l'exigence que les trois classes de caractères sont contenues.

Et en ce qui concerne la sortie personnalisé, il suffit d'utiliser une expression ternaire:

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