Java 具有范围的 bean 验证大写字母
Java bean validation uppercase letters with range
我对 java bean 验证的模式有一些疑问。
我在 java class
中有一个变量模式
@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} 它会崩溃
名称 应符合以下值
- 个人资料 - 正确
- P-真
- PRO - 正确
- PROFILEPROFILEPROFILEPROFILEPROF - 真
- PROFILEPROFILEPROFILEPROFILEPROFI - 错误
- 个人资料名称 - 错误
- 配置文件 1 - 正确
- PROFILE100 - 正确
- PROFILE1000 - 正确
- PROFILE1000000 - 正确
- 1111 - 错误
- PROFILEPROFILE123456789PROFILE123 - 错误
- profile_name - 错误
- *^^@ - 错误
- 个人资料名称 - 正确
- PROFILE_NAME - 真
- 简介。 - 真
- &)12p - 错误
- 11个人资料 - 正确
- 1234 配置文件 - 正确
- $%#PROFILE - 正确
- 无 - 错误
如何 change/refactor 该模式可以为大写字母添加范围,而 2、5、12 是否有效?
解法是“(?=.*[A-Z])[\p{标点}A-Z0-9 ]{1,32}”
您可以使用
@Pattern(regexp = "(?=.*[A-Z])[\p{Punct}A-Z0-9 ]{1,32}", message = "Error")
由于模式是默认锚定的(它与 .matches()
方法一起使用),模式周围不需要 ^
和 $
。
它匹配:
(?=.*[A-Z])
- 在除换行字符以外的任何 0+ 个字符之后,必须至少有 1 个大写 ASCII 字母
[\p{Punct}A-Z0-9 ]{1,32}
- 匹配 1 到 32 个大写 ASCII 字母、数字、space 或 Punct POSIX 字符 class 中的字符(它包括标点符号和符号)。
我对 java bean 验证的模式有一些疑问。 我在 java class
中有一个变量模式@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} 它会崩溃
名称 应符合以下值
- 个人资料 - 正确
- P-真
- PRO - 正确
- PROFILEPROFILEPROFILEPROFILEPROF - 真
- PROFILEPROFILEPROFILEPROFILEPROFI - 错误
- 个人资料名称 - 错误
- 配置文件 1 - 正确
- PROFILE100 - 正确
- PROFILE1000 - 正确
- PROFILE1000000 - 正确
- 1111 - 错误
- PROFILEPROFILE123456789PROFILE123 - 错误
- profile_name - 错误
- *^^@ - 错误
- 个人资料名称 - 正确
- PROFILE_NAME - 真
- 简介。 - 真
- &)12p - 错误
- 11个人资料 - 正确
- 1234 配置文件 - 正确
- $%#PROFILE - 正确
- 无 - 错误
如何 change/refactor 该模式可以为大写字母添加范围,而 2、5、12 是否有效?
解法是“(?=.*[A-Z])[\p{标点}A-Z0-9 ]{1,32}”
您可以使用
@Pattern(regexp = "(?=.*[A-Z])[\p{Punct}A-Z0-9 ]{1,32}", message = "Error")
由于模式是默认锚定的(它与 .matches()
方法一起使用),模式周围不需要 ^
和 $
。
它匹配:
(?=.*[A-Z])
- 在除换行字符以外的任何 0+ 个字符之后,必须至少有 1 个大写 ASCII 字母[\p{Punct}A-Z0-9 ]{1,32}
- 匹配 1 到 32 个大写 ASCII 字母、数字、space 或 Punct POSIX 字符 class 中的字符(它包括标点符号和符号)。