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;
}
我还需要反复输入输入,直到输入正确的格式。我怎么做?我当前的正则表达式打印"名称格式不正确"当我输入"本史密斯"虽然它不应该打印,因为本史密斯是一个有效的输入!
答案 0 :(得分:4)
<input type="date" ng-model="date" name="DOB">
从输入而不是下一行返回下一个标记。您可以在Scanner中设置另一个分隔符以返回行,但最自定义的方法是使用
input.next
答案 1 :(得分:1)
扫描仪的next()
方法仅返回下一个单词,在您的情况下&#34; Ben&#34;。将其替换为nextLine()
以获取全名。
Scanner input = new Scanner(System.in);
String name;
System.out.println("Enter your name:");
name = input.nextLine();
用你的正则表达式匹配&#34; Ben Smith&#34;。
答案 2 :(得分:-2)
^[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}
。
评论指出:
&#34;据我所知,他们只想要两个带空格的单词 inbetween有效&#34;
然后正则表达式将是"^[A-Za-z]+ [A-Za-z]+$"
。