我需要帮助在Java中使用以下名称编写正则表达式:
name
name`s
name name
name-name
name`s name
name`s-name
我尝试编写以下正则表达式,但它不起作用:(
String nameRegex = "[A-Za-z]+(-|,|\\s)?[A-Za-z]*";
我写了以下功能
public static boolean validateName(String val) {
logger.info("in validate number");
String numberRegex = "^[A-Za-z]+(-\\s)?[A-Za-z]+$";
if (val.matches(numberRegex)) {
logger.info("in validate name of method validate");
return true;
} else {
logger.info("in else of method validate");
return false;
}
}
其验证是:
我的模式不满意。
如果我使用此模式"^\p{L}+(?:[-,\s`]\p{L}+)*$"
结束名称没有空格,则返回false。它也接受带有数字的名称。 abc123
答案 0 :(得分:0)
您在备选列表中缺少“。”。
如果您的交替中只有一个字符,请使用字符类。
您应该将完整的最后一部分匹配0次或更多次。
[a-zA-Z]
是匹配名称的非常糟糕的选择。那些名字中有非ASCII字符的穷人是什么? 使用\p{L}
代替。
所以你的正则表达式看起来像
^\\p{L}+(?:[-,\\s`]\\p{L}+)*$
\p{L}
Unicode code property是否与具有“letter”==>属性的单个Unicode代码点匹配它匹配来自任何语言的任何类型的字母。
我在我的解决方案中也使用了锚点^
和$
,如果你需要或不需要,它在Java中依赖于你使用的方法。请显示代码,如何调用正则表达式。