整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

jquery.Validate 形式的验证方式

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的实现方式有两种,下面分别介绍下着两种不容的实现方式:

  1. 将校验规则写到控件中,代码实例如下图

方式一

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>