java - 如果字符串包含连字符,则使用正则表达式验证第二个名称
问题描述
我在使用 Java 中的正则表达式验证第二个名称时遇到问题。
我使用Pattern.compile方法将给定的正则表达式编译成模式。和Pattern.mathcer方法来创建一个匹配器,它将给定的输入与这个模式相匹配。
如果字符串包含连字符,我需要验证第二个名称。
这是我要验证的功能:
/**
* Determines if the string is valid and returns result code
*
* @param fio string to validate
* @return 1 - valid second name, name, patronymic; 2 - valid second name, name; 0 - invalid string
*/
public static int Validate(String fio) {
Pattern pattern;
Matcher matcher;
try {
pattern = Pattern.compile("([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+"); //second name; name; patronymic
matcher = pattern.matcher(fio);
if (matcher.matches()) return 1;
pattern = Pattern.compile("([A-Z])[a-z]+ ([A-Z])[a-z]+"); //second name; name
matcher = pattern.matcher(fio);
if (matcher.matches()) return 2;
} catch (PatternSyntaxException ex1) {
System.out.println("String is incorrect!");
}
return 0;
}
您能告诉我如何更改我的正则表达式字符串模式以使用连字符验证第二个名称吗?
解决方案
您可以使用
public static int Validate(String fio) {
//second name; name; patronymic
if (fio.matches("\\p{Lu}\\p{Ll}+(?:-\\p{Lu}\\p{Ll}+)* \\p{Lu}\\p{Ll}+ \\p{Lu}\\p{Ll}+")) {
return 1;
}
//second name; name
if (fio.matches("\\p{Lu}\\p{Ll}+(?:-\\p{Lu}\\p{Ll}+)* \\p{Lu}\\p{Ll}+")) {
return 2;
}
return 0;
}
正\p{Lu}\p{Ll}+(?:-\p{Lu}\p{Ll}+)*
则表达式匹配
\p{Lu}
- 一个大写的 Unicode 字母\p{Ll}+
- 1+ 小写 Unicode 字母(?:-\p{Lu}\p{Ll}+)*
- 零次或多次重复-
- 一个连字符\p{Lu}
- 一个大写的 Unicode 字母\p{Ll}+
- 1+ 小写 Unicode 字母
在线查看Java 演示:
System.out.println(Validate("Стриженов Анатолий Иванович"));
// => 1
System.out.println(Validate("Стриженов Анатолий"));
// => 2
System.out.println(Validate("Стриженов-Бродский Анатолий Иванович"));
// => 1
System.out.println(Validate("Стриженов-Бродский Анатолий"));
// => 2
System.out.println(Validate("Стриженов"));
// => 0
推荐阅读
- android - 如何在彼此之上绘制三个不同透明的圆圈?
- python - pypylon:进程以退出代码 -1066598274 (0xC06D007E) 结束
- windows - Windows 10 中是否有任何 UI 可以更改当前的 MAPI 提供程序?
- javascript - 角度错误:Webpack 已使用与 API 模式不匹配的配置对象进行初始化
- mysql - 如何在 MySQL 中进行 2 个查询的交集
- html - 位置粘性与 z-index 结合
- css - 有没有办法构建一个三重边界,中间和最里面的边界线只跨越四个角中的两个?
- dart - Flutter:只显示图像的特殊部分
- macros - 匹配封闭函数的返回类型
- javascript - 使用 Webpacker 在 Rails 应用程序中渲染 ReactJS CRUD 组件的问题