JavaBean验证和正则表达式-两个不同错误消息中的格式和长度
例如,输入的是电话号码。格式是 (国家代码)(空间)(区号)(空间)(电话号码) 区号可以为空JavaBean验证和正则表达式-两个不同错误消息中的格式和长度,java,regex,bean-validation,Java,Regex,Bean Validation,例如,输入的是电话号码。格式是 (国家代码)(空间)(区号)(空间)(电话号码) 区号可以为空 e.g. 63 240 1234567 (valid) 63 1234567 (valid) 我需要什么正则表达式模式才能让它检查所有字符是否都是数字,以及电话号码(不带国家和区号)是否有一定长度 是否可能仅使用一种模式,我就可以为两个不同的无效输入生成两条不同的错误消息: 1.所有字符都应该是数字 2.实际电话号码长度应为7到10 因为我们现在是这样的 @Pattern(regexp=" s
e.g.
63 240 1234567 (valid)
63 1234567 (valid)
我需要什么正则表达式模式才能让它检查所有字符是否都是数字,以及电话号码(不带国家和区号)是否有一定长度
是否可能仅使用一种模式,我就可以为两个不同的无效输入生成两条不同的错误消息:
1.所有字符都应该是数字
2.实际电话号码长度应为7到10
因为我们现在是这样的
@Pattern(regexp=" some regex pattern", message="phone is invalid")
private String phoneNumber
我可以添加一个@Size验证器,但我只需要删掉电话号码
有人能帮忙吗 此表达式可能有效:
^(\d{2})\s(?:(\d{3})\s)?(\d{7,10})$
说明:
字符串的开头^
2位数字,后跟空格(国家代码)(空格)(\d{2})\s
(可选)3位数字,后跟空格(区号)(空格)(?:(\d{3})\s)?
7到10位数字(\d{7,10})
字符串结尾$
- 它将匹配诸如
和632401234567
之类的内容,但它不会匹配631234567
或631234567
,它希望在每个节后面都有一个空格。克服这些限制很容易,但这取决于所需的验证级别。如果空格是可选的,您可以将两个632401234567
替换为\s
\s?
^(?(\d{2})\s?(?:(\d{3})\s?)(\d{7,10})$
代码示例
如果您想按顺序对这两种模式进行评估,那么可以对Java代码使用以下答案(),并结合上面的两个正则表达式
现在使用定义的序列验证Bean实例时
(validator.validate(bean,Sequence.class)),首先是@Size
只有在@Pattern成功的情况下,才会验证约束
约束
诸如此类:
@GroupSequence({First.class, Second.class})
public interface Sequence {}
@Pattern(regexp = "^[ \d]+$", message = "Numeric input required" , groups = { First.class })
@Pattern(regexp = "^(?:(\d{2})\s?)?(?:(\d{3})\s?)?(\d{7,10})$", message = "Phone no. should be 7-10 in length" , groups = { Second.class })
private String phoneNumber;
使用一个正则表达式只能返回一条错误消息,对吗?如果我们想要“需要数字输入”和“电话号码长度应为7-10”两条单独的无效错误消息,该怎么办?我对Java不够熟悉,无法提供完整的代码,但我猜您需要使用两个不同的测试来评估字符串。对数字和空格的测试类似于
^[\d]+$
,对特定数字的测试类似于我给您的测试。如果将空格设为可选,则只能计算字符串中有多少位数字。这是介于{}
之间的数字,如果您遵循这一点,那么在bean验证中,将讨论编码多个测试的方法。有了我给你的正则表达式,你应该能够对两者都进行评估。他们谈论两种不同的方法,所以你可能想决定你喜欢哪种方法。
@GroupSequence({First.class, Second.class})
public interface Sequence {}
@Pattern(regexp = "^[ \d]+$", message = "Numeric input required" , groups = { First.class })
@Pattern(regexp = "^(?:(\d{2})\s?)?(?:(\d{3})\s?)?(\d{7,10})$", message = "Phone no. should be 7-10 in length" , groups = { Second.class })
private String phoneNumber;