Java – 全名的正则表达式

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

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; } 

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

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

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

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

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

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

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

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

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

全部一起:

- matches first names / lastname -
^([AZ][az]*((\s)))+[AZ][az]*$

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

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

问的是什么

而不是"^[a-zA-Z][ ]*$"不是"^[a-zA-Z ]*$" 。 有一些答案可以参考\s但你不想要那些,因为它们会给你一些像制表符这样的空格。

其他常见例子

在旁注中,有包含名字的名字和名字,如Mary-Ann作为名字或连字符的姓氏,如Jones-Garcia 。 还有姓氏有周期,如St. Marc 。 最后,你有一些像O'Donnel这样的姓氏。

边注

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

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

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

建议的解决方案

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

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

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

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

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

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