2016-04-09 30 views
0

我试图让一个Java正则表达式的工作使用ScannerSystem.in功能,试图验证用户输入。我想验证的是只能包含字母作为输入的用户输入,并且可以包含多个单词。如果我的例子(“测试1”)中键入它会抛出一个信息,警告我必须输入字母,并提示在重新进入,但是如果我可以键入(“测试1”),那么它会通过我的正则表达式,这似乎是空间导致这个问题,但在我的正则表达式中添加一个空间还没有解决我的问题。任何帮助将不胜感激。下面是我的代码是有问题的部分:Java的扫描仪hasNext()字符串的正则表达式验证

System.out.println("Please enter the your name: "); 

while(!input.hasNext("[a-zA-Z]+")){ 

    System.out.println("Your name must consist of only letters"); 
    input.nextLine(); 

} 

String name = input.nextLine(); 

这可能是明显错误的人,但我是新来的Java和正则表达式,并一直在试图找出一整天一直与去错了什么没有成功。

谢谢您的时间。

+0

尝试'^ [a-zA-Z_] * $'这并不完美,但它很简单足以让新手理解。 – TEK

+0

也许'^ [a-zA-Z_] + $'这样空字符串是不允许的。 – totoro

回答

1

所有你需要做的就是添加[]的内部空间。我也建议使用^(声明它必须是字符串的开始)和$(用于字符串的结尾):

^[a-zA-Z ]+$ 

您还可以使用\s选择所有的空白,像标签

你全码:

System.out.println("Please enter the your name: "); 

while(!input.hasNext("^[a-zA-Z ]+$")){ 
    System.out.println("Your name must consist of only letters"); 
    input.nextLine(); 
} 

String name = input.nextLine(); 

如果你想允许像*符号,所以一切BU t数字。你可以使用\d+。如果它匹配,然后打印出错误(你需要删除while声明中的!

+0

我会提出同样的答案,但它不会工作..我测试相同的代码以'约翰Doe',它将R输入回路,和我想不通为什么.. – Maljam

+0

我有同样的作为Maljam的问题,我一整天都在尝试,如果有空间存在,它似乎不能验证输入。只有像“Test1”这样的字符串,而不是“Test 1”,即使在[]中增加了空格。感谢您的建议,虽然Druzion! – ChocolateDogBone

+0

@ChocolateDogBone你用'\ s'尝试过吗? – Druzion