我对java bean验证的模式有一些问题。 我在java类中有我的变量模式
@Pattern(regexp = ".*[A-Z]+[[A-Z]\\p{Space}]+[A-Z\\p{Punct}]+([0-9]{1,10})?", message = "Error")*
private String name;
实际上它正在工作,但现在我必须为大写单词添加范围{0,32}。 当我添加[A-Z] {0,32}时,它会崩溃
名称 应符合
以下的值如何更改/重构该模式以便为大写字母和2,5,12添加范围可行?
解决方案是“(?=。* [A-Z])[\ p {Punct} A-Z0-9] {1,32}”
答案 0 :(得分:2)
您可以使用
@Pattern(regexp = "(?=.*[A-Z])[\\p{Punct}A-Z0-9 ]{1,32}", message = "Error")
请参阅regex demo
由于模式默认是锚定的(它与.matches()
方法一起使用),因此模式周围不需要^
和$
。
匹配:
(?=.*[A-Z])
- 在除了换行符之外的任何0+字符之后,必须至少有1个大写ASCII字母[\\p{Punct}A-Z0-9 ]{1,32}
- 匹配Punct POSIX字符类中的1到32个大写ASCII字母,数字,空格或字符(包括标点符号和符号)。