使用 RegEx 验证 Java 中的名字和姓氏
Using RegEx for validating First and Last names in Java
我正在尝试验证包含一个人的名字和姓氏的 String
。可接受的名称格式如下。
Bruce Schneier
Schneier, Bruce
Schneier, Bruce Wayne
O’Malley, John F.
John O’Malley-Smith
Cher
我想出了以下程序来验证 String 变量。 validateName
函数应该 return true
如果名称格式匹配任何提到的格式。否则它应该 return false
.
import java.util.regex.*;
public class telephone {
public static boolean validateName (String txt){
String regx = "^[\\p{L} .'-]+$";
Pattern pattern = Pattern.compile(regx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(txt);
return matcher.find();
}
public static void main(String args[]) {
String name = "Ron O’’Henry";
System.out.println(validateName(name));
}
}
但由于某种原因,它是 returning false
任何值。我在这里做错了什么?
你可以这样做:
^[^\s]+,?(\s[^\s]+)*$
使用这个:
^[\p{L}\s.’\-,]+$
演示: https://regex101.com/r/dQ8fK8/1
解释:
- 您遇到的最大问题是
'
,而’
是不同的。您只能通过从文本中复制粘贴来实现该字符。
- 在
[]
中使用\-
代替-
,因为它会被误认为是一个范围。例如:[a-z]
- 您可以使用
\s
而不是
来匹配任何空格。
您在正则表达式中使用了太多反斜杠:"^[\\p{L} .'-]+$"
经过Java字面解释,即:^[\p{L} .'-]+$
这意味着匹配以下字符的任意组合:
\ p { L } space . ' -
如果改为:"^[\p{L} .'-]+$"
正则表达式将看到:^[\p{L} .'-]+$
这意味着匹配以下字符的任意组合:
letters space . ' -
但是:不验证名称。
参见What are all of the allowable characters for people's names?, which leads to Personal names around the world。
简而言之:你不能,所以不要。
我正在尝试验证包含一个人的名字和姓氏的 String
。可接受的名称格式如下。
Bruce Schneier
Schneier, Bruce
Schneier, Bruce Wayne
O’Malley, John F.
John O’Malley-Smith
Cher
我想出了以下程序来验证 String 变量。 validateName
函数应该 return true
如果名称格式匹配任何提到的格式。否则它应该 return false
.
import java.util.regex.*;
public class telephone {
public static boolean validateName (String txt){
String regx = "^[\\p{L} .'-]+$";
Pattern pattern = Pattern.compile(regx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(txt);
return matcher.find();
}
public static void main(String args[]) {
String name = "Ron O’’Henry";
System.out.println(validateName(name));
}
}
但由于某种原因,它是 returning false
任何值。我在这里做错了什么?
你可以这样做:
^[^\s]+,?(\s[^\s]+)*$
使用这个:
^[\p{L}\s.’\-,]+$
演示: https://regex101.com/r/dQ8fK8/1
解释:
- 您遇到的最大问题是
'
,而’
是不同的。您只能通过从文本中复制粘贴来实现该字符。 - 在
[]
中使用\-
代替-
,因为它会被误认为是一个范围。例如:[a-z]
- 您可以使用
\s
而不是来匹配任何空格。
您在正则表达式中使用了太多反斜杠:"^[\\p{L} .'-]+$"
经过Java字面解释,即:^[\p{L} .'-]+$
这意味着匹配以下字符的任意组合:
\ p { L } space . ' -
如果改为:"^[\p{L} .'-]+$"
正则表达式将看到:^[\p{L} .'-]+$
这意味着匹配以下字符的任意组合:
letters space . ' -
但是:不验证名称。
参见What are all of the allowable characters for people's names?, which leads to Personal names around the world。
简而言之:你不能,所以不要。