用于验证的正则表达式:名字姓氏(例如本史密斯)

时间:2015-11-25 10:48:13

标签: java regex

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;

}

我还需要反复输入输入,直到输入正确的格式。我怎么做?我当前的正则表达式打印"名称格式不正确"当我输入"本史密斯"虽然它不应该打印,因为本史密斯是一个有效的输入!

3 个答案:

答案 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]+$"