gpt4 book ai didi

Java Bean 验证和正则表达式 - 两种不同错误消息中的格式和长度

转载 作者:行者123 更新时间:2023-12-01 09:00:04 25 4
gpt4 key购买 nike

例如,输入电话号码。格式为

(国家代码)(空格)(区号)(空格)(电话号码)

区号可以为空。

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 validator ,但我只需要删除电话号码。

有人可以帮忙吗?

最佳答案

这个表达式可以工作:

^(\d{2})\s(?:(\d{3})\s)?(\d{7,10})$

说明:

  • ^ 字符串开头
  • (\d{2})\s 2 位数字,后跟一个空格(国家/地区代码)(空格)
  • (?:(\d{3})\s)?(可选)3 位数字,后跟一个空格(区号)(空格)
  • (\d{7,10}) 7 到 10 位数字
  • $ 字符串结尾

Example

限制:

  • 它将匹配 63 240 123456763 1234567 等内容,但不会匹配 63123456763 240 1234567,每个部分后面都有一个空格。解决这些限制很容易,但这取决于您所需的验证级别。如果空格是可选的,您可以将 \s 替换为 \s?

变体

如果您希望所有空格和国家/地区代码都是可选的,请使用以下变体:^(?:(\d{2})\s?)?(?:(\d{3})\s?)?(\d{7,10})$

代码示例

如果您想按顺序评估这两种模式,您可以针对 Java 代码使用此答案 ( https://stackoverflow.com/a/41603564/7400458 ),并结合上面的两个正则表达式。

@GroupSequence({First.class, Second.class})
public interface Sequence {}

@Size(min = 2, max = 10, message = "Name length improper", groups = { First.class })
@Pattern(regexp = "T.*", message = "Name doesn't start with T" , groups = { Second.class })
private String name;

When now validating a Bean instance using the defined sequence (validator.validate(bean, Sequence.class)), at first the @Size constraint will be validated and only if that succeeds the @Pattern constraint.

类似的事情:

 @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;

关于Java Bean 验证和正则表达式 - 两种不同错误消息中的格式和长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41753361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com