[英]Java Bean validation and regex - format and length in two different error message
例如,輸入為電話號碼。 格式為
(國家代碼)(空格)(區域代碼)(空格)(電話號碼)
區號可以為空白。
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位數字 $
字符串結尾 63 240 1234567
和63 1234567
類的東西,但不匹配631234567
或63 240 1234567
,它期望每個部分之后都有一個空格。 解決這些限制很容易,但這取決於所需的驗證級別。 如果空格是可選的,則可以將兩個\\s
替換為\\s?
如果您希望所有空格和國家/地區代碼為可選,請使用以下變體: ^(?:(\\d{2})\\s?)?(?:(\\d{3})\\s?)?(\\d{7,10})$
如果您希望按順序評估這兩種模式,則可以使用以下答案( https://stackoverflow.com/a/41603564/7400458 ),針對Java代碼,並結合上面的兩個正則表達式。
@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;
現在,當使用定義的序列(validator.validate(bean,Sequence.class))驗證Bean實例時,首先將驗證@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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.