【发布时间】:2016-08-18 07:30:25
【问题描述】:
我正在尝试验证包含一个人的名字和姓氏的String。可接受的名称格式如下。
Bruce Schneier
Schneier, Bruce
Schneier, Bruce Wayne
O’Malley, John F.
John O’Malley-Smith
Cher
我想出了以下将验证字符串变量的程序。 validateName 函数应该返回 true 如果名称格式匹配任何提到的格式。否则它应该返回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));
}
}
但由于某种原因,它会为任何值返回 false。我在这里做错了什么?
【问题讨论】:
-
John Von Neumann会发生什么?Eddie Van Halen怎么样?Hans Ten Brink?Arturo Dell'Antonio?我在一家出版公司工作了七年,花了数百个小时来解决这个问题。答:没有算法可以100%做到这一点,您需要构建和维护一个姓氏前缀列表。这是一个困难的问题。 -
您的正则表达式的问题是四个反斜杠。当您只需要 2 个时,但这并不能使您的正则表达式真正匹配所有测试。
标签: java regex validation match names