首頁 > 軟體

Java中@Pattern註解常用的校驗正規表示式學習筆記

2022-07-06 14:05:46

1、 前端傳參要求

專案開發中經常會遇到對使用者輸入內容的限制,本篇對常用限制做一總結。如下圖所示,標識欄位有嚴格命名限制,使用者輸入校驗這部分工作前端可以做,當然後端也可以通過在實體類中新增註解的方式實現引數校驗。其底層原理還是攔截器攔截請求,對帶有相關注解的屬性欄位進行處理(非空、大小、長度、內容等判斷和驗證)

實體類中程式碼如下:

/**
* 公司名稱
*/
@Pattern(regexp="^[u4e00-u9fa5_a-zA-Z0-9]+$",message="公司名稱只能輸入中文字元 字母、數位")
		@ApiModelProperty(value = "公司名稱")
		private String name;

有時系統對使用者名稱的命名有更多要求,比如使用者名稱必須要有一個小寫字母,一個大寫字母和一個數位,並且是6-20位,正規表示式如下:

   @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[A-Za-z0-9]{6,20}$", message = "使用者名稱錯誤")

2、其他常用正規表示式

2.1 數位校驗

1 整數或者小數:"^[0-9]+.{0,1}[0-9]{0,2}$"
2 只能輸入數位:"^[0-9]*$"
3 只能輸入零和非零開頭的數位:"^(0|[1-9][0-9]*)$"
4 只能輸入有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"
5 只能輸入有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"
6 只能輸入非零的正整數:"^+?[1-9][0-9]*$"
7 只能輸入非零的負整數:"^^-[1-9]+[0-9]*$"

2.2 字串校驗

只能輸入長度為3的字元:"^.{3}$"。
只能輸入由26個英文字母組成的字串:"^[A-Za-z]+$"
只能輸入由26個大寫英文字母組成的字串:"^[A-Z]+$"
只能輸入由26個小寫英文字母組成的字串:"^[a-z]+$"
只能輸入由數位和26個英文字母組成的字串:"^[A-Za-z0-9]+$"
只能輸入由數位、26個英文字母或者下劃線組成的字串:"^w+$"

2.3 月份時間校驗

驗證一年的12個月:"^(0?[1-9]|1[0-2])$"    //格式為:"01"~"09"和"1"~"12"。
驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"  //格式為;"01"~"09"和"1"~"31"。

2.4 Email校驗

   由於各種域名郵箱的多樣性,需要特殊情況特殊對待,限制可以做的嚴格也可以寬鬆
舉例:zhangsan_123@cetc.com.cn

分析郵件名稱部分:
   字母和數位表示為A-Za-z0-9 
   下劃線表示為_
   中劃線表示為-
   由於名稱是由若干個字母、數位、下劃線和中劃線組成,所以需要用到+表示多次出現
   通過分析得出郵件名稱部分表示式為[a-zA-Z0-9_-]+

分析域名部分:
   一般域名的規律為「[N級域名][三級域名.]二級域名.頂級域名」,比如"qq.com"、"www.qq.com"、"mp.weixin.qq.com"、"12-34.com.cn",分析可得域名類似"** .** .** .**"組成。
   "**"部分可以表示為[a-zA-Z0-9_-]+
   ".**"部分可以表示為.[a-zA-Z0-9_-]+
   多個".**"可以表示為(.[a-zA-Z0-9_-]+)+
   綜上所述,域名部分可以表示為[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+
   
最終表示式: 
 我們用@符號將郵箱的名稱和域名拼接起來,因此完整的郵箱表示式為 
  ^[A-Za-z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$

驗證Email: "^[A-Za-z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$"

2.5 漢字校驗

只能輸入漢字:"^[u4e00-u9fa5]{0,}$"

匹配中文字元的正規表示式:"[u4e00-u9fa5]"

2.5 聯絡電話校驗

聯絡電話:@Pattern(regexp = "^[\d\*]{7,12}$", message = "聯絡電話輸入有誤")
由於區號分為3位和四位的,然後座機號碼又分為7位和8位元的,所以這裡校驗的長度是7-12位元,並且這裡新增了*表示脫敏的手機號仍然可以通過校驗。

2.5 密碼校驗

密碼:長度為6-32位元,並且必須包含數位、字母、特殊符號中的至少兩種:
@Pattern(regexp = "^(?=.*[a-zA-Z0-9].*)(?=.*[a-zA-Z.!@#$%^&*].*)(?=.*[0-9.!@#$%^&*].*).{6,32}$", message = "密碼至少包含數位,字母和符號的兩種")

總結

到此這篇關於Java中@Pattern註解常用的校驗正規表示式學習筆記的文章就介紹到這了,更多相關Java @Pattern註解校驗正規表示式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com