Java - 全名的正则表达式

时间:2011-09-09 13:44:07

标签: java regex string validation matcher

如何验证正则表达式的全名?我只想要字母表(没有数字),只需要正则表达式的空格。这就是我到目前为止所做的。你能帮我修一下这个正则表达式吗?非常感谢你

public static boolean isFullname(String str) {
    boolean isValid = false;
    String expression = "^[a-zA-Z][ ]*$"; //I know this one is wrong for sure >,<
    CharSequence inputStr = str;
    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);
    if (matcher.matches()) {
        isValid = true;
    }
    return isValid;
}

6 个答案:

答案 0 :(得分:21)

识别名称的这个问题非常以文化为中心,而且它真的没有可靠的工作希望。我真的会建议不要这样做,因为在我所知道的地球上任何一个国家的任何国家都有 NO 规范形式构成一个人的名字。我可以合法地将我的名字改为#&*∫Ω∆ Smith,这不符合任何人的算法。并不是说这个具体的例子是很多人所做的事情,但是在考虑数据输入时,许多人不会在ASCII表之外思考,这会导致问题。

你可以反对这种情况发生的可能性,但在全球化的世界中,你的所有用户都越来越不可能为他们的名字使用英语拼音拼写。您也很可能拥有来自不具有名/姓概念的文化的用户。不要认为,即使您的应用程序仅在特定国家/地区运行,您的某些用户也不会来自其他地方(人们会一直从一个国家/地区迁移到另一个国家/地区,而其中一些用户可能希望使用您的软件)。

保护您的应用免受SQL注入此类字段(如果您将这些存储在数据库中),并将其留在此处。

答案 1 :(得分:6)

此方法验证名称,如果名称没有或有数字或特殊字符,则返回false:

public static boolean isFullname(String str) {
    String expression = "^[a-zA-Z\\s]+"; 
    return str.matches(expression);        
}

答案 2 :(得分:1)

[A-Z]匹配单个大写字母(名字的第一个字母)

[a-z]*匹配任意数量的小写字母(其他字母或名称)

(\s)匹配1个空白字符(名称之间的空格)

+前一个表达式中的一个或多个(匹配多个名称)

所有在一起:

- matches first names / lastname -
^([A-Z][a-z]*((\s)))+[A-Z][a-z]*$

或匹配DiMaggio St. Croix,O'Reilly和Le-Pew等名字。你可以在M rememberKinley中添加类似“ᶜ”的相似字符,或者在他们的名字中遇到那些不太常见字符的人

^([A-z\'\.-ᶜ]*(\s))+[A-z\'\.-ᶜ]*$

答案 3 :(得分:1)

提出了什么要求

而不是"^[a-zA-Z][ ]*$",而不是"^[a-zA-Z ]*$"。有一些答案引用\s,但您不想要那些,因为它们会为您提供其他空格,例如标签。

其他常见示例

在旁注中,首字母和姓氏包含大量名称,例如Mary-Ann作为名字或带连字符的姓氏,如Jones-Garcia。还有包含句点的姓氏,例如St. Marc。最后,您有一些'的姓氏O'Donnel

旁注

从法律上讲,您可以将您的姓名更改为Little Bobby Drop Tables ...或者包含其他随机字符......但我不确定有多少系统真正适合这样的内容。

如果你想要一般情况(全世界),那么不要用任何字符类型限制字段,因为你可以在希腊字母,西里尔字母,中文字母等中有名字。还有非英语重音字符和其他东西,如德国变音符号。

如果您担心SQL注入,请使用参数化查询而不是动态查询。

建议的解决方案

如果您只是担心英文字母,并且想要使用处理上述示例案例的正则表达式,那么您可以使用"^[a-zA-Z \-\.\']*$"

答案 4 :(得分:-2)

public static boolean isFullname(String str) {
    return str.matches("^[a-zA-z ]*$");
}

如果字符串只包含字母和空格,则此方法返回true。

但如果字符串不包含任何内容,它也会返回true。

答案 5 :(得分:-2)

使用\s作为空格。您还可以使用String.matches(regex)来测试字符串是否与正则表达式匹配。

public static boolean isFullname(String str) {
    String expression = "^[a-zA-Z\\s]*$"; 
    return str.matches(expression);        
}