簡體   English   中英

Java中的正則表達式:驗證用戶輸入

[英]Regular Expression in Java: Validating user input

我試圖在while循環中使用正則表達式驗證用戶輸入。 我正在嘗試僅接受一個小寫單詞(包括字母az)。

public class testRedex{

    public static void main(String [] args){    
         Scanner console = new Scanner(System.in);      
         System.out.print("Please enter a key: ");      
         while(!console.hasNext("[a-z]+")){                 
              System.out.println("Invalid key");            
              console.next();           
         }

         String test = console.next();          
         System.out.println(test);          
    }
}

我的問題是,使用正則表達式“ [az] +”和“ [az] + $”有什么區別嗎? 我知道$會在字符串末尾的az之間尋找一個字符,但是在這種情況下會重要嗎?

是的,有區別,如果您使用: ^[az]+$則意味着用戶輸入的任何內容都應僅從[az]+

如果您不添加^$則用戶可以插入其他字符,例如空格,並且仍然會有一個匹配項(字符串的第一部分,直到空格為止)。

讓我們來看一個例子:

  • 輸入以下內容運行代碼:“嘗試此”(它將顯示“ try”)
  • 現在將正則表達式更改為^[az]+$並使用相同的輸入運行(它將顯示“ Invalid key”)。

我將其重寫的方式是:

    System.out.print("Please enter a key: ");

    String test = console.nextLine();
    while (!test.matches("^[a-z]+$")) {
        System.out.println("Invalid key");
        test = console.nextLine();
    }
    System.out.println(test);

區別如下

[az]+表示a,b,c,...或z出現多次

[az]+$表示a,b,c,...或z出現多次且必須與行尾匹配

但最后,它們給您相同的結果

如果您想更好地理解它,請嘗試此

([A-Z])([a-z]+$)

它以大寫字母開頭,並以多次小寫字母結尾

輸出:

Please enter a key: AAAAaaaa
Invalid key
Aaaaaa
Aaaaaa

您可以從想要的結果中獲得預期結果的另一種方法

碼:

    int i = 0;
    String result = "";
    do{
    Scanner input = new Scanner(System.in);
    System.out.println("Enter your key:");

    if(input.hasNext("^[a-z]+$")){
        result = input.next();
        i=1;
    }else{
        System.out.println("Invalid key"); 
    }
   }while(i==0);
    System.out.println("the result is " + result);

輸出:

Enter your key:
HHHh
Invalid key
Enter your key:
Hellllo
Invalid key
Enter your key:
hello
the result is hello

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM