Java中的正则表达式:验证用户输入

时间:2014-07-06 04:52:21

标签: java regex

我正在尝试使用while循环中的正则表达式验证用户输入。我试图只接受一个小写字母(包括字母a-z)。

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);          
    }
}

我的问题是,将正则表达式作为" [a-z] +"之间是否有任何区别?和" [a-z] + $"?我知道$会在字符串末尾的a-z之间寻找一个字符,但在这种情况下会不会很重要?

2 个答案:

答案 0 :(得分:1)

是的,如果您使用以下内容有所不同:^[a-z]+$这意味着无论用户输入什么,都只能从[a-z]+合并。

如果您没有添加^$,则用户可以插入其他字符,例如空格,并且仍然会匹配(字符串的第一部分,直到空间。

让我们看一个例子:

  • 使用输入运行您的代码:"试试这个" (它打印"尝试")
  • 现在将正则表达式更改为^[a-z]+$并使用相同的输入运行(它打印"无效键")。

我重写的方式是:

    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);

答案 1 :(得分:0)

差异如下

[a-z]+表示a,b,c,...或z出现多次

[a-z]+$表示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