@Pattern与Unicode脚本\\p{L}*不起作用。

4

我在使用javax.validation.constraints.Pattern @Pattern验证时遇到了问题。

@Pattern(regexp = "\\p{L}*", message = "Msg")
private String name;

当我尝试输入任何文本时,它都无法工作。

当我使用:

@Pattern(regexp = "[a-zA-Z]*", message = "Msg")

它在处理非拉丁字符方面表现出色。


2
你能定义一下“不工作”是什么意思吗? - assylias
你要输入什么文本?请注意,这里的模式是锚定的,你只能输入字母。如果想要允许空格等其他字符,请使用 [\\p{L}\\s]* - Wiktor Stribiżew
当我使用'regexp = "[a-zA-Z]*'时,它可以很好地处理"abc",但是对于拉丁字符则无法正常工作。 - Tomasz Gutkowski
2
如果您使用 regexp = "(?U)\\p{L} *",会怎样? - Wiktor Stribiżew
@assylias 是的,它被拒绝了。 - Tomasz Gutkowski
显示剩余5条评论
1个回答

1
你需要使用Pattern.UNICODE_CHARACTER_CLASS标志使\p{L}模式支持Unicode。

启用预定义字符类和POSIX字符类的Unicode版本。

由于你正在使用字符串模式,因此可以使用内联(嵌入式)标志变体(?U)

regexp = "(?U)\\p{L}*"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接