Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaBean验证和正则表达式-两个不同错误消息中的格式和长度_Java_Regex_Bean Validation - Fatal编程技术网

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})$
说明:
  • ^
    字符串的开头
  • (\d{2})\s
    2位数字,后跟空格(国家代码)(空格)
  • (?:(\d{3})\s)?
    (可选)3位数字,后跟空格(区号)(空格)
  • (\d{7,10})
    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;