2016-09-25 84 views
0

密码检查程序应该输入用户名和密码,并输出密码是否有效。Java密码模式

我一直在尝试使用正则表达式,但我有一个问题。该模式适用于我所有的规则,但一个是用户名规则。 此外,有没有办法将输出从“真”或“假”更改为自定义?

我迄今为止代码:

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

} 

我明白任何帮助! :)

+0

你知道,与上次编辑你改变了从“必须包含数字,小写字母和大写字母”到“必须包含的意义数字和小写**或**大写字母“?现在只需使用小写字母和大写字母即可。你是否对我的答案失去了赞同?如果是这样,为什么? – Vampire

回答

1

您应该只能初步检查它是否具有该子序列。 我会检查,最初然后检查您的密码规则。 所以这样的事情(使用正则表达式):

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

更好的办法是使用在字符串contains方法(docs)。

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

至于定制输出matches你不能。你需要有条件地分支并做一些不同的事情。

+0

我早些时候试过自己的if语句,但没有成功,我回头看了一下,发现有一些逻辑错误。 – Aramza

+0

好,希望你能解决它^ _ ^ –

0

对于用户名检查可以将正则表达式更改为

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

这意味着至少8个未之后或用户名之前的任意字符。这与负面的后视和负面看起来一样,就像你使用积极的向前看要求包含三个特征类一样。

和关于自定义输出,只需使用三元表达式:

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