halo.validate
@Validate(rules = { @Rule(value = "required:true", message = "用戶名不能為空"), @Rule(value = "checkUsernameExists:", message = "用戶名不能重復"), @Rule(value = "maxlength:10", message = "輸入長度最多是 10 的字符串(漢字算一個字符)。"), @Rule(value = "minlength:5", message = "輸入長度最小是 5 的字符串(漢字算一個字符)。") }) private String username; @Validate(rules = { @Rule(value = "required:true", message = "密碼不能為空") }) private String password; public static void main(String[] args) { User user = new User(); user.setUsername("admin"); IValidateService validate = new BaseValidateService(); validate.validate(user); }
jquery.Validate 形式的驗證方式 繼承Validation 實現驗證 配置ValidationRegister 注解
#例子:
###校驗器 @ValidationRegister("checkUsernameExists") public class UsernameValidation implements Validation {
@Override public Boolean validate(Object attrValue, Class<?> attrType, Object params) { if (attrValue.equals("admin")) { return true; } return false; } }
###配置 加入validate 配置(halo.validate.yaml 默認放于/src/main/resources): message 提示信息, packagesToScan是掃描注冊的驗證類
validate: packagesToScan: com.dasuanzhuang.halo.test message: required: 不能為空 maxlength: 長度不能超過{0} minlength: 長度不能小于{0}
###應用:
@Validate(rules = { @Rule(value = "required:true", message = "用戶名不能為空"), @Rule(value = "checkUsernameExists:", message = "用戶名不能重復") }) private String username;
###驗證 public static void main(String[] args) { User user = new User(); user.setUsername("admin"); IValidateService validate = new BaseValidateService(); validate.validate(user); }
###出錯提示: Exception in thread "main" com.dasuanzhuang.halo.validate.error.ValidateException: [User.username(java.lang.String)] at com.dasuanzhuang.halo.validate.BaseValidateService.validate(BaseValidateService.java:115) at com.dasuanzhuang.halo.test.Test.main(Test.java:45) Caused by: com.dasuanzhuang.halo.validate.error.ValidateException: [rule:{checkUsernameExists:},message:用戶名不能重復] at com.dasuanzhuang.halo.validate.BaseValidateService.parseRuleAndValidate(BaseValidateService.java:60) at com.dasuanzhuang.halo.validate.BaseValidateService.validate(BaseValidateService.java:83) ... 1 more
以上是halo.validate的全部配置,配置packagesToScan標簽可以掃描ValidationRegister注解的類
#@Validate 驗證注解: 可以注釋到屬性上 ,驗證的時候會獲取這個注解 rules,規則列表,可以存在多個驗證規則 objClass:如果對象內存在驗證對象,可以添加objClass = Role.class 標識當前對象需要驗證,如果不加,只驗證規則驗證
#@Rule 是驗證規則: 你可以在value中填寫驗證規則如: required:true ,必須以:分割 左邊代表校驗器標識,右邊標識傳遞的參數,沒有參數可以為空,多余一個值用[1,2,3]類似數組的表現形式:驗證注解中可以存在多個規則。
#校驗器標識
系統默認的校驗器包括required,maxlength,minlength,也可以自定義校驗器,以下校驗器標識為checkUsernameExists @ValidationRegister("checkUsernameExists") public class UsernameValidation implements Validation { @Override public Boolean validate(Object attrValue, Class<?> attrType, Object params) { if (attrValue.equals("admin")) { return true; } return false; } }
#自定義校驗器:
繼承Validation 并且 需要配置注解ValidationRegister,實現validate(Object attrValue, Class<?> attrType, Object params) 方法,attrValue 傳入屬性值,attrType屬性類型,params 冒號后面的參數,如果是多個值,以String[] 形式傳遞 required,maxlength,minlength 使用說明: required:true 對象不為空,如果是String類,默認會驗證是否為空字符串 maxlength:10 表示長度不能超過10 minlength:10 表示長度最小不能小于10
#支持內部對象驗證
@Validate( rules = { @Rule(value = "required:true", message = "角色不能為空") }, objClass = Role.class ) private Role role ; @Validate( rules = { @Rule(value = "required:true", message = "角色list不能為空") }, objClass = Role.class ) private List<Role> roles ; @Validate( rules = { @Rule(value = "required:true", message = "角色map不能為空") }, objClass = Role.class ) private Map<String,Role> roleMap;
role是嵌套對象,在@Validate 中指定objClass = Role.class,就可以完成嵌套對象驗證
@Validate(rules = { @Rule(value = "required:true", message = "用戶名不能為空"), @Rule(value = "checkUsernameExists:", message = "用戶名不能重復"), @Rule(value = "maxlength:10", message = "輸入長度最多是 10 的字符串(漢字算一個字符)。"), @Rule(value = "minlength:5", message = "輸入長度最小是 5 的字符串(漢字算一個字符)。") }, objClass = Role.class)
#與spring 集成 ValidationBuilder.createValidation 根據名字返回Validation對象 ,建議重新定義ValidationBuilder.createValidation方法
web開發中,往往會需要對用戶輸入的內容進行合法的校驗,防止用戶輸入的內容無效等存入數據庫意義不大還浪費資源。比如某些網站在注冊過程中身份證號碼是否合法、電話號碼是否填完整、郵箱格式是否正確。下面就介紹一種強大的表單驗證插件,jquery validate 插件為表單提供了強大的驗證功能,讓客戶端表單驗證變得更簡單,同時提供了大量的定制選項,滿足應用程序各種需求。該插件捆綁了一套有用的驗證方法,包括 URL 和電子郵件驗證,同時提供了一個用來編寫用戶自定義方法的 API。
jquery validate 有一套自己的校驗規則,這些網上查資料都會有,下面截圖展示下它自己的校驗規則
validate校驗規則
首先要先導入這三個js到你的項目里面,然后在頁面添加引用進去
jquery.js
jquery.validate.min.js
messages_zh.js
一般來說validate的實現方式有兩種,下面分別介紹下著兩種不容的實現方式:
將校驗規則寫到控件中,代碼實例如下圖
方式一
2.將校驗規則寫到外部 js 代碼中,頁面和js分別如下圖
頁面代碼
外部Js代碼
上面兩種不同的方式都是在點擊提交按鈕的時候才會觸發校驗。個人覺得jquey validate功能是比較強大的,我這里只是介紹了其中的冰上一角而已,如果你想了解的更多可以去官網上查閱更多API。歡迎大家提出你的意見或建議哈。
釋:js文件自行下載
html頁面:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery validation之表單驗證</title>
<script src="./jquery-1.11.1.min.js"></script>
<script src="./jquery.validate.min.js"></script>
<script>
$(function () {
$("#login").validate({
rules:{//驗證規則
name:{
required:true,
minlength:2,
maxlength:10
},
password:{
required:true,
}
},
messages:{//提示信息:與rules是"一一對應"的
name:{
required:'不能為空',
minlength:'最小為2位',
maxlength:'最大為10位'
},
password:{
required:'不能為空',
}
}
})
});
</script>
</head>
<body>
<form action="" method="get" id="login">
用戶名:<input name="name" type="text"><br />
密碼:<input name="password" type="password" /><br />
<input type="submit" class="button" value="登錄">
</form>
</body>
</html>
*請認真填寫需求信息,我們會在24小時內與您取得聯系。