繁体   English   中英

用于验证的正则表达式:姓氏的名字(例如Ben Smith)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM