SpringBoot中@Pattern注解對時間格式校驗方式
SpringBoot @Pattern注解對時間格式校驗
1.需求背景
有一個需求,在前端傳過來的時間格式的字符串進(jìn)行校驗,是否符合"yyyy-MM-dd HH:mm:ss",在SpringBoot中當(dāng)然可以用@Datetimeformat注解來進(jìn)行驗證,但字段的屬性得用Date類型,由于我的項目中該字段用了String類型,需要對類型進(jìn)行轉(zhuǎn)換不太符合要求,所有用到了@Pattern注解。
在實體類的字段名上添加@Pattern注解,有個屬性regexp,該屬性的值就是正則表達(dá)式。
"yyyy-MM-dd HH:mm:ss"的正則表達(dá)式如下:
"^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"
我們還需用到@Validated注解,該注解使用在controller層的方法參數(shù)中,只有使用該注解,@pattern中的時間格式校驗才起作用,這一點尤其重要。
2.實現(xiàn)案例
entity:
//刪除時間 @Pattern(regexp = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$") private String deletedAt;
//刪除時間 @Pattern(regexp = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$") private String deletedAt;
controller:
/** * 添加設(shè)備類別 */ @ApiOperation(value = "添加設(shè)備類別",notes="傳入?yún)?shù)是category對象") @PostMapping("/category") public int addCategory(@Validated Category category){ return iCategory.addCategory(category); }
測試結(jié)果:
當(dāng)輸入的時間為2020-08-26或2020/08/26 11:22:33,時間格式不符合"yyyy-MM-dd HH:mm:ss",就會出現(xiàn)報錯,如下所示:
只有輸入正確格式的數(shù)據(jù),才能插入成功:
@Pattern的用法
把這個注解加在entity的參數(shù)上,可以選擇分類也可以默認(rèn);
關(guān)于注解中需要傳的參數(shù):一般默認(rèn)就填入正則表達(dá)式即可,但是java中字符串需要轉(zhuǎn)義,這個需要注意一下。
@Pattern(regexp = "\\w+$") private String userName;
在user傳參或者controller層中的添加@Validated注解進(jìn)行調(diào)用
舉個栗子:
public void addUser(@Validated User user){...}
下面是常用的正則表達(dá)式
- 匹配首尾空格的正則表達(dá)式:(^\s*)|(\s*$)
- 整數(shù)或者小數(shù):^[0-9]+\.{0,1}[0-9]{0,2}$
- 只能輸入數(shù)字:"^[0-9]*$"。
- 只能輸入n位的數(shù)字:"^\d{n}$"。
- 只能輸入至少n位的數(shù)字:"^\d{n,}$"。
- 只能輸入m~n位的數(shù)字:。"^\d{m,n}$"
- 只能輸入零和非零開頭的數(shù)字:"^(0|[1-9][0-9]*)$"。
- 只能輸入有兩位小數(shù)的正實數(shù):"^[0-9]+(.[0-9]{2})?$"。
- 只能輸入有1~3位小數(shù)的正實數(shù):"^[0-9]+(.[0-9]{1,3})?$"。
- 只能輸入非零的正整數(shù):"^\+?[1-9][0-9]*$"。
- 只能輸入非零的負(fù)整數(shù):"^\-[1-9][]0-9"*$。
- 只能輸入長度為3的字符:"^.{3}$"。
- 只能輸入由26個英文字母組成的字符串:"^[A-Za-z]+$"。
- 只能輸入由26個大寫英文字母組成的字符串:"^[A-Z]+$"。
- 只能輸入由26個小寫英文字母組成的字符串:"^[a-z]+$"。
- 只能輸入由數(shù)字和26個英文字母組成的字符串:"^[A-Za-z0-9]+$"。
- 只能輸入由數(shù)字、26個英文字母或者下劃線組成的字符串:"^\w+$"。
- 驗證用戶密碼:"^[a-zA-Z]\w{5,17}$"正確格式為:以字母開頭,長度在6~18之間,只能包含字符、數(shù)字和下劃線。
- 驗證是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
- 只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"
- 驗證Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
- 驗證InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
- 驗證電話號碼:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正確格式為:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
- 驗證身份證號(15位或18位數(shù)字):"^\d{15}|\d{18}$"。
- 驗證一年的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"。
- 匹配中文字符的正則表達(dá)式: [\u4e00-\u9fa5]
- 匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff]
- 應(yīng)用:計算字符串的長度(一個雙字節(jié)字符長度計2,ASCII字符計1)
- String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;}
- 匹配空行的正則表達(dá)式:\n[\s| ]*\r
- 匹配html標(biāo)簽的正則表達(dá)式:<(.*)>(.*)<\/(.*)>|<(.*)\/>
- 中文字母數(shù)字下劃線:^[a-zA-Z0-9_\u4e00-\u9fa5]*$
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java日常練習(xí)題,每天進(jìn)步一點點(30)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07