2016-09-25 28 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")