簡體   English   中英

Java Bean驗證和正則表達式-格式和長度中的兩種不同的錯誤消息

[英]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 123456763 1234567類的東西,但不匹配63123456763 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM