【发布时间】:2019-06-27 21:04:29
【问题描述】:
我在 Javascript (NodeJS) 中有以下语句 -
const name = (name) =>
name && !XRegExp('^[\\p{L}\'\\d][ \\p{L}\'\\d-]*[\\p{L}\'-\'\\d]$').test(name)
? 'Invalid' : undefined
此正则表达式用于 name 可以接受 . 、 - 和 (空格)并且应该以字符开头。
如何在 java 中实现相同的验证正则表达式。我在下面试过 -
@Pattern(regexp = "^(?U)[\\p{L}\\'\\d][ \\p{L}\\'\\d-]*[\\p{L}\\'-\\'\\d]$" ,
message="Invalid name")
String name;
【问题讨论】:
-
在 Java AFAIK 中,unicode 内联标志是
(?u)而不是(?U)。此外,请注意字符类中的连字符,特别是\\'-\\',它似乎定义了一个奇怪的字符范围。 -
@CasimiretHippolyte "
UNICODE_CASEUnicode 感知大小写折叠也可以通过嵌入式标志表达式 (?u)" 和 "UNICODE_CHARACTER_CLASS模式启用也可以通过嵌入的标志表达式 (?U) 启用。标志暗示UNICODE_CASE,即它启用 Unicode 感知大小写折叠" -
(?U)是多余的,除非\d必须匹配波斯语、印度语等数字。 -
@CarlosHeuberger:谢谢,很高兴知道。