[英]Regex for validating : Firstname LastName(e.g Ben Smith)
String getname(){
Scanner input = new Scanner(System.in);
String name;
System.out.println("Enter your name:");
name= input.next();
String name_pattern = "^[A-Za-z]+(\\s[A-Za-z]+)$";//this regex isnt validating Ben Smith
Pattern pattern = Pattern.compile(name_pattern);
Matcher regexmatcher = pattern.matcher(name);
if(!regexmatcher.matches()){
System.out.println("Name format not correct");
}
return name;
}
我还需要一次又一次地输入,直到输入正确的格式。 我怎么做? 当我输入“ Ben Smith”时,我当前的正则表达式打印“名称格式不正确”,尽管它不应该打印出来,因为Ben Smith是有效的输入!
input.next
从输入而不是下一行返回下一个标记。 您可以在Scanner中设置另一个定界符以返回行,但是最自定义的方式是使用
name= input.nextLine();
扫描程序的next()
方法仅返回下一个单词,在您的情况下为“ Ben”。 将其替换为nextLine()
以获取全名。
Scanner input = new Scanner(System.in);
String name;
System.out.println("Enter your name:");
name = input.nextLine();
这样,您的正则表达式将与“ Ben Smith”匹配。
^[A-Za-z ]+$
就足够了。
private final static Pattern NAME_VALIDATOR = Pattern.compile("^[A-Za-z ]+$");
[...]
System.out.println(NAME_VALIDATOR.matcher("Ben Smith").matches());
请注意,Pattern始终相同,因此您只需创建一次即可,而不必每次输入方法都创建一次。
还要注意,这不会验证带有'
名称,例如O'Brian
,也不会验证带有外国名称的名称,例如Mätthaus
。 考虑改用\\p{L}
。
如评论指出:
“据我了解,他们只希望两个单词之间有一个空格是有效的”
那么正则表达式将改为"^[A-Za-z]+ [A-Za-z]+$"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.