The W3C Markup Validation Service
Markup Validation Service
Check the markup (HTML, XHTML, …) of Web documents
Validate by URI
Validate by File Upload
Validate by Direct Input
Validate by URI
Validate a document online:
Address:
More Options
Character Encoding
(detect automatically)
utf-8 (Unicode, worldwide)
utf-16 (Unicode, worldwide)
iso-8859-1 (Western Europe)
iso-8859-2 (Central Europe)
iso-8859-3 (Southern Europe)
iso-8859-4 (North European)
iso-8859-5 (Cyrillic)
iso-8859-6-i (Arabic)
iso-8859-7 (Greek)
iso-8859-8 (Hebrew, visual)
iso-8859-8-i (Hebrew, logical)
iso-8859-9 (Turkish)
iso-8859-10 (Latin 6)
iso-8859-11 (Latin/Thai)
iso-8859-13 (Latin 7, Baltic Rim)
iso-8859-14 (Latin 8, Celtic)
iso-8859-15 (Latin 9)
iso-8859-16 (Latin 10)
us-ascii (basic English)
euc-jp (Japanese, Unix)
shift_jis (Japanese, Win/Mac)
iso-2022-jp (Japanese, email)
euc-kr (Korean)
ksc_5601 (Korean)
gb2312 (Chinese, simplified)
gb18030 (Chinese, simplified)
big5 (Chinese, traditional)
Big5-HKSCS (Chinese, Hong Kong)
tis-620 (Thai)
koi8-r (Russian)
koi8-u (Ukrainian)
iso-ir-111 (Cyrillic KOI-8)
macintosh (MacRoman)
windows-1250 (Central Europe)
windows-1251 (Cyrillic)
windows-1252 (Western Europe)
windows-1253 (Greek)
windows-1254 (Turkish)
windows-1255 (Hebrew)
windows-1256 (Arabic)
windows-1257 (Baltic Rim)
Only if missing
Document Type
(detect automatically)
HTML5 (experimental)
XHTML 1.0 Strict
XHTML 1.0 Transitional
XHTML 1.0 Frameset
HTML 4.01 Strict
HTML 4.01 Transitional
HTML 4.01 Frameset
HTML 4.01 + RDFa 1.1
HTML 3.2
HTML 2.0
ISO/IEC 15445:2000 ("ISO HTML")
XHTML 1.1
XHTML + RDFa
XHTML Basic 1.0
XHTML Basic 1.1
XHTML Mobile Profile 1.2
XHTML-Print 1.0
XHTML 1.1 plus MathML 2.0
XHTML 1.1 plus MathML 2.0 plus SVG 1.1
MathML 2.0
SVG 1.0
SVG 1.1
SVG 1.1 Tiny
SVG 1.1 Basic
SMIL 1.0
SMIL 2.0
Only if missing
List Messages Sequentially Group Error Messages by Type
Show Source
Clean up Markup with HTML-Tidy
Show Outline
Validate error pages
Verbose Output
Validate by File Upload
Upload a document for validation:
File:
More Options
Character Encoding
(detect automatically)
utf-8 (Unicode, worldwide)
utf-16 (Unicode, worldwide)
iso-8859-1 (Western Europe)
iso-8859-2 (Central Europe)
iso-8859-3 (Southern Europe)
iso-8859-4 (North European)
iso-8859-5 (Cyrillic)
iso-8859-6-i (Arabic)
iso-8859-7 (Greek)
iso-8859-8 (Hebrew, visual)
iso-8859-8-i (Hebrew, logical)
iso-8859-9 (Turkish)
iso-8859-10 (Latin 6)
iso-8859-11 (Latin/Thai)
iso-8859-13 (Latin 7, Baltic Rim)
iso-8859-14 (Latin 8, Celtic)
iso-8859-15 (Latin 9)
iso-8859-16 (Latin 10)
us-ascii (basic English)
euc-jp (Japanese, Unix)
shift_jis (Japanese, Win/Mac)
iso-2022-jp (Japanese, email)
euc-kr (Korean)
ksc_5601 (Korean)
gb2312 (Chinese, simplified)
gb18030 (Chinese, simplified)
big5 (Chinese, traditional)
Big5-HKSCS (Chinese, Hong Kong)
tis-620 (Thai)
koi8-r (Russian)
koi8-u (Ukrainian)
iso-ir-111 (Cyrillic KOI-8)
macintosh (MacRoman)
windows-1250 (Central Europe)
windows-1251 (Cyrillic)
windows-1252 (Western Europe)
windows-1253 (Greek)
windows-1254 (Turkish)
windows-1255 (Hebrew)
windows-1256 (Arabic)
windows-1257 (Baltic Rim)
Only if missing
Document Type
(detect automatically)
HTML5 (experimental)
XHTML 1.0 Strict
XHTML 1.0 Transitional
XHTML 1.0 Frameset
HTML 4.01 Strict
HTML 4.01 Transitional
HTML 4.01 Frameset
HTML 4.01 + RDFa 1.1
HTML 3.2
HTML 2.0
ISO/IEC 15445:2000 ("ISO HTML")
XHTML 1.1
XHTML + RDFa
XHTML Basic 1.0
XHTML Basic 1.1
XHTML Mobile Profile 1.2
XHTML-Print 1.0
XHTML 1.1 plus MathML 2.0
XHTML 1.1 plus MathML 2.0 plus SVG 1.1
MathML 2.0
SVG 1.0
SVG 1.1
SVG 1.1 Tiny
SVG 1.1 Basic
SMIL 1.0
SMIL 2.0
Only if missing
List Messages Sequentially Group Error Messages by Type
Show Source
Clean up Markup with HTML-Tidy
Show Outline
Validate error pages
Verbose Output
Note: file upload may not work with Internet
Explorer on some versions of Windows XP Service Pack 2, see our
information page
on the W3C QA Website.
Validate by direct input
Enter the Markup to validate:
More Options
Validate Full Document
Use Doctype:
(detect automatically)
HTML5 (experimental)
XHTML 1.0 Strict
XHTML 1.0 Transitional
XHTML 1.0 Frameset
HTML 4.01 Strict
HTML 4.01 Transitional
HTML 4.01 Frameset
HTML 4.01 + RDFa 1.1
HTML 3.2
HTML 2.0
ISO/IEC 15445:2000 ("ISO HTML")
XHTML 1.1
XHTML + RDFa
XHTML Basic 1.0
XHTML Basic 1.1
XHTML Mobile Profile 1.2
XHTML-Print 1.0
XHTML 1.1 plus MathML 2.0
XHTML 1.1 plus MathML 2.0 plus SVG 1.1
MathML 2.0
SVG 1.0
SVG 1.1
SVG 1.1 Tiny
SVG 1.1 Basic
SMIL 1.0
SMIL 2.0
Only if Doctype is missing
Validate HTML fragment
Use Doctype:
HTML 4.01
XHTML 1.0
List Messages Sequentially Group Error Messages by Type
Show Source
Clean up Markup with HTML-Tidy
Show Outline
Validate error pages
Verbose Output
This validator checks the
markup validity
of Web documents in HTML, XHTML, SMIL, MathML, etc.
If you wish to validate specific content such as
RSS/Atom feeds or
CSS stylesheets,
MobileOK content,
or to find broken links,
there are other validators and tools available.
As an alternative you can also try our non-DTD-based validator.
Home |
About... |
News |
Docs |
Help & FAQ |
Feedback |
Contribute |
Copyright © 2024 World Wide Web Consortium. W3C® liability, trademark and permissive license rules apply.
Java中Validator的使用_validator.validate可以层级遍历吗-CSDN博客
Java中Validator的使用
最新推荐文章于 2023-06-26 08:09:43 发布
荼白z
最新推荐文章于 2023-06-26 08:09:43 发布
阅读量8.4k
收藏
18
点赞数
1
分类专栏:
Java
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Zhang_0507/article/details/105071766
版权
Java
专栏收录该内容
30 篇文章
1 订阅
订阅专栏
很多时候都需要校验穿的参数是否符合规则,但是这种校验的代码会重复很多,所以引入 validator 来校验参数,这样可以省去很多冗余的代码
1.pom文件引入
2.需要校验的参数
在每个参数上写好我们需要校验的方式注解
@Getter
@Setter
public class UserParam {
private Integer id;
@NotBlank(message = "用户名不可以为空")
@Length(min = 1, max = 20, message = "用户名长度需要在20个字以内")
private String username;
@NotBlank(message = "电话不可以为空")
@Length(min = 1, max = 13, message = "电话长度需要在13个字以内")
private String telephone;
@NotBlank(message = "邮箱不允许为空")
@Length(min = 5, max = 50, message = "邮箱长度需要在50个字符以内")
private String mail;
}
3.编写 Validator 校验工具
public class BeanValidator {
private static ValidatorFactory validatorFactory= Validation.buildDefaultValidatorFactory();
//返回map
public static
Validator validator=validatorFactory.getValidator();
Set validateResult=validator.validate(t,groups);
//如果为空
if (validateResult.isEmpty()){
return Collections.emptyMap();
}else{
//不为空时表示有错误
LinkedHashMap errors= Maps.newLinkedHashMap();
//遍历
Iterator iterator=validateResult.iterator();
while (iterator.hasNext()){
ConstraintViolation violation=(ConstraintViolation) iterator.next();
errors.put(violation.getPropertyPath().toString(),violation.getMessage());
}
return errors;
}
}
//返回list
public static Map
//基础校验collection是否为空
Preconditions.checkNotNull(collection);
//遍历collection
Iterator iterator=collection.iterator();
Map errors;
do {
//如果循环下一个为空直接返回空
if (!iterator.hasNext()){
return Collections.emptyMap();
}
Object object=iterator.next();
errors=validate(object,new Class[0]);
}while (errors.isEmpty());
return errors;
}
// 校验某一对象是否合法
public static Map
if (objects !=null && objects.length > 0 ){
return validateList(Lists.asList(first,objects));
} else {
return validate(first , new Class[0]);
}
}
//校验参数方法
public static void check(Object param) throws ParamException {
Map
//如果错误集合map不为空则抛出异常
if (MapUtils.isNotEmpty(map)){
throw new ParamException(map.toString());
}
}
}
4.自定义抛出的参数异常类
public class ParamException extends RuntimeException{
public ParamException() {
super();
}
public ParamException(String message) {
super(message);
}
public ParamException(String message, Throwable cause) {
super(message, cause);
}
public ParamException(Throwable cause) {
super(cause);
}
protected ParamException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
5.在传入参数时先校验参数
如果参数不符合规则会直接抛出异常,不会进行后面的操作
public void save(DeptParam param){
BeanValidator.check(param);
//再执行其他操作
}
6.常见的校验注解
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator提供的校验注解:
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
优惠劵
荼白z
关注
关注
1
点赞
踩
18
收藏
觉得还不错?
一键收藏
知道了
1
评论
Java中Validator的使用
很多时候都需要校验穿的参数是否符合规则,但是这种校验的代码会重复很多,所以引入 validator 来校验参数,这样可以省去很多冗余的代码1.pom文件引入 <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</art...
复制链接
扫一扫
专栏目录
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
09-01
主要介绍了BootStrap与validator 使用笔记(JAVA SpringMVC实现)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
JsonValidator.java
12-23
Java验证字符串是否为JSON格式
1 条评论
您还未登录,请先
登录
后发表或查看评论
java-validator:带有注解的 Java bean 验证器
07-19
java验证器
带有注解的 Java bean 验证器
javaframe-validator
07-13
javaframe验证器
JSON-Validator-Java:Java中的JSON对象验证
02-16
JSON-Validator-Java:Java中的JSON对象验证
javax.validation 的pom
weixin_42602368的博客
01-16
831
javax.validation是一个在Java中进行验证的库,它可以在项目中通过添加maven依赖来使用。在pom.xml中添加以下依赖即可:
...
Validation 分组校验(个人记录)
qq_36332554的博客
08-22
731
同一个接口针对不同类型的值使用Validation进行分组校验
valiators数据校验
Merryhyl的专栏
03-26
722
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
3.注解说明
2. 然后自定义Validator
这个是真正进行验证的逻辑代码:
@NotNull:不能为null,但可以为empty(""," "," ") @NotEmpty:不能为null,而且长度必须大于0 (" "," ") @NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0("test") 即:必须有实际字符 此处只列出Hibernate Validator提供的大部分验证约束注解,请参考hibernate validator官方文档了解其他验证约束注解和进行自定义的验证约束注解定义。 实战演练 话不多说,直接走实践路线,同样使用的是SpringBoot的快速框架 详细代码见:
https://github.com/leaJone/mybot
1. @Validated 声明要检查的参数 这里我们在控制器层进行注解声明 /**
* 走参数校验注解
*
* @param userDTO
* @return
*/
@PostMapping("/save/valid")
public RspDTO save(@RequestBody @Validated UserDTO userDTO) {
userService.save(userDTO);
return RspDTO.success();
} 2. 对参数的字段进行注解标注 import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.Date;
/**
* @author LiJing
* @ClassName: UserDTO
* @Description: 用户传输对象
* @date 2019/7/30 13:55
*/
@Data
public class UserDTO implements Serializable {
private static final long serialVersionUID = 1L;
/*** 用户ID*/
@NotNull(message = "用户id不能为空")
private Long userId;
/** 用户名*/
@NotBlank(message = "用户名不能为空")
@Length(max = 20, message = "用户名不能超过20个字符")
@Pattern(regexp = "^[\\u4E00-\\u9FA5A-Za-z0-9\\*]*$", message = "用户昵称限制:最多20字符,包含文字、字母和数字")
private String username;
/** 手机号*/
@NotBlank(message = "手机号不能为空")
@Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
private String mobile;
/**性别*/
private String sex;
/** 邮箱*/
@NotBlank(message = "联系邮箱不能为空")
@Email(message = "邮箱格式不对")
private String email;
/** 密码*/
private String password;
/*** 创建时间 */
@Future(message = "时间必须是将来时间")
private Date createTime;
} 3. 在全局校验中增加校验异常 MethodArgumentNotValidException是springBoot中进行绑定参数校验时的异常,需要在springBoot中处理,其他需要处理ConstraintViolationException异常进行处理. 为了优雅一点,我们将参数异常,业务异常,统一做了一个全局异常,将控制层的异常包装到我们自定义的异常中. 为了优雅一点,我们还做了一个统一的结构体,将请求的code,和msg,data一起统一封装到结构体中,增加了代码的复用性. import com.boot.lea.mybot.dto.RspDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.NoHandlerFoundException;
import javax.validation.ConstraintViolationException;
import javax.validation.ValidationException;
/**
* @author LiJing
* @ClassName: GlobalExceptionHandler
* @Description: 全局异常处理器
* @date 2019/7/30 13:57
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
private Logger logger = LoggerFactory.getLogger(getClass());
private static int DUPLICATE_KEY_CODE = 1001;
private static int PARAM_FAIL_CODE = 1002;
private static int VALIDATION_CODE = 1003;
/**
* 处理自定义异常
*/
@ExceptionHandler(BizException.class)
public RspDTO handleRRException(BizException e) {
logger.error(e.getMessage(), e);
return new RspDTO(e.getCode(), e.getMessage());
}
/**
* 方法参数校验
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public RspDTO handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
logger.error(e.getMessage(), e);
return new RspDTO(PARAM_FAIL_CODE, e.getBindingResult().getFieldError().getDefaultMessage());
}
/**
* ValidationException
*/
@ExceptionHandler(ValidationException.class)
public RspDTO handleValidationException(ValidationException e) {
logger.error(e.getMessage(), e);
return new RspDTO(VALIDATION_CODE, e.getCause().getMessage());
}
/**
* ConstraintViolationException
*/
@ExceptionHandler(ConstraintViolationException.class)
public RspDTO handleConstraintViolationException(ConstraintViolationException e) {
logger.error(e.getMessage(), e);
return new RspDTO(PARAM_FAIL_CODE, e.getMessage());
}
@ExceptionHandler(NoHandlerFoundException.class)
public RspDTO handlerNoFoundException(Exception e) {
logger.error(e.getMessage(), e);
return new RspDTO(404, "路径不存在,请检查路径是否正确");
}
@ExceptionHandler(DuplicateKeyException.class)
public RspDTO handleDuplicateKeyException(DuplicateKeyException e) {
logger.error(e.getMessage(), e);
return new RspDTO(DUPLICATE_KEY_CODE, "数据重复,请检查后提交");
}
@ExceptionHandler(Exception.class)
public RspDTO handleException(Exception e) {
logger.error(e.getMessage(), e);
return new RspDTO(500, "系统繁忙,请稍后再试");
}
} 4. 测试 如下文:确实做到了参数校验时返回异常信息和对应的code,方便了我们不再繁琐的处理参数校验 在ValidationMessages.properties 就是校验的message,有着已经写好的默认的message,且是支持i18n的,大家可以阅读源码赏析 自定义参数注解 1. 比如我们来个 自定义身份证校验 注解 @Documented
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = IdentityCardNumberValidator.class)
public @interface IdentityCardNumber {
String message() default "身份证号码不合法";
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
} 这个注解是作用在Field字段上,运行时生效,触发的是IdentityCardNumber这个验证类。 message 定制化的提示信息,主要是从ValidationMessages.properties里提取,也可以依据实际情况进行定制 groups 这里主要进行将validator进行分类,不同的类group中会执行不同的validator操作 payload 主要是针对bean的,使用不多。 2. 然后自定义Validator 这个是真正进行验证的逻辑代码: public class IdentityCardNumberValidator implements ConstraintValidator
@Override
public void initialize(IdentityCardNumber identityCardNumber) {
}
@Override
public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
return IdCardValidatorUtils.isValidate18Idcard(o.toString());
}
} IdCardValidatorUtils在项目源码中,可自行查看 3. 使用自定义的注解 @NotBlank(message = "身份证号不能为空")
@IdentityCardNumber(message = "身份证信息有误,请核对后提交")
private String clientCardNo; 4.使用groups的校验 有的宝宝说同一个对象要复用,比如UserDTO在更新时候要校验userId,在保存的时候不需要校验userId,在两种情况下都要校验username,那就用上groups了: 先定义groups的分组接口Create和Update import javax.validation.groups.Default;
public interface Create extends Default {
}
import javax.validation.groups.Default;
public interface Update extends Default{
} 再在需要校验的地方@Validated声明校验组 /**
* 走参数校验注解的 groups 组合校验
*
* @param userDTO
* @return
*/
@PostMapping("/update/groups")
public RspDTO update(@RequestBody @Validated(Update.class) UserDTO userDTO) {
userService.updateById(userDTO);
return RspDTO.success();
} 在DTO中的字段上定义好groups = {}的分组类型 @Data
public class UserDTO implements Serializable {
private static final long serialVersionUID = 1L;
/*** 用户ID*/
@NotNull(message = "用户id不能为空", groups = Update.class)
private Long userId;
/**
* 用户名
*/
@NotBlank(message = "用户名不能为空")
@Length(max = 20, message = "用户名不能超过20个字符", groups = {Create.class, Update.class})
@Pattern(regexp = "^[\\u4E00-\\u9FA5A-Za-z0-9\\*]*$", message = "用户昵称限制:最多20字符,包含文字、字母和数字")
private String username;
/**
* 手机号
*/
@NotBlank(message = "手机号不能为空")
@Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误", groups = {Create.class, Update.class})
private String mobile;
/**
* 性别
*/
private String sex;
/**
* 邮箱
*/
@NotBlank(message = "联系邮箱不能为空")
@Email(message = "邮箱格式不对")
private String email;
/**
* 密码
*/
private String password;
/*** 创建时间 */
@Future(message = "时间必须是将来时间", groups = {Create.class})
private Date createTime;
} 注意:在声明分组的时候尽量加上 extend javax.validation.groups.Default 否则,在你声明@Validated(Update.class)的时候,就会出现你在默认没添加groups = {}的时候的校验组@Email(message = "邮箱格式不对"),会不去校验,因为默认的校验组是groups = {Default.class}. 5.restful风格用法 在多个参数校验,或者@RequestParam 形式时候,需要在controller上加注@Validated @GetMapping("/get")
public RspDTO getUser(@RequestParam("userId") @NotNull(message = "用户id不能为空") Long userId) {
User user = userService.selectById(userId);
if (user == null) {
return new RspDTO
}
return new RspDTO
} @RestController
@RequestMapping("user/")
@Validated
public class UserController extends AbstractController {
....圣洛代码... 总结 用起来很简单,soEasy,重点参与的统一结构体返回,统一参数校验,是减少我们代码大量的try catch 的法宝,我觉得在项目中,将异常处理好,并将异常做好日志管理,才是很好的升华,文章浅显,只是一个菜鸟的进阶笔记…. 这里只是个人见解,技术菜,欢迎大佬不吝赐教…
优惠劵
一样的霸笔
关注
关注
27
点赞
踩
189
收藏
觉得还不错?
一键收藏
知道了
4
评论
参数校验(validator)详解
作者:锦成同学juejin.im/post/5d3fbeb46fb9a06b317b3c48很痛苦遇到大量的参数进行校验,在业务中还要抛出异常或者不断的返回异常时的校验信息,在代码中相当冗长, 充满了if-else这种校验代码,今天我们就来学习spring的javax.validation 注解式参数校验.为什么要用validator1.javax.validation的一系列注...
复制链接
扫一扫
Zend Framework常用校验器详解
01-20
本文实例讲述了Zend Framework常用校验器。分享给大家供大家参考,具体如下:
Date日期校验器
代码:
require_once 'Zend/Validate/Date.php';
function c_date($date){
$validator = new Zend_Validate_Date();
if($validator->isValid($date)){
echo 输入的日期格式:;
echo $date.有效!
;
}else{
echo 输入的日期格式:;
echo $date.无效!
参数校验的多种方式
qq_42956206的博客
09-08
3240
参数校验的几种方式
如果默认的字段类型和选项不能满足需求,需要再补充校验行为,可以使用以下三种方法:
通过字段中的validators 选项进行校验
validate_
validate方法:对多个字段进行比较校验
一、通过 validators选项校验
在序列化器字段中添加validators选项参数进行...
4 条评论
您还未登录,请先
登录
后发表或查看评论
详解vue-validator(vue验证器)
08-31
本篇文章主要介绍了vue-validator(vue验证器),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
jQuery表单校验插件validator使用方法详解
11-21
validator插件:将jquery实现的常用操作进行封装,我们只需要学会插件的使用语法,就可以使用简单的代码实现较为复杂的功能。
validator的基本使用
1. 需要引入的文件
① jQuery类库
② 插件的js文件 官网
2.表单校验插件validator的基本语法
在rules中通过校验规则名称使用校验规则 ,在messages中定义该规则对应的错误提示信息。
[removed][removed]
[removed][removed]
<
Hibernate Validator校验参数疑点难点方法详解.docx
07-02
为了解决上面的痛点,将验证逻辑与相应的领域模型进行绑定是十分有必要的。为此产生了JSR 303 – Bean Validation 规范。Hibernate Validator 是 JSR-303 的参考实现,它提供了 JSR 303 规范中所有的约束(constraint)的实现,同时也增加了一些扩展。
XValidator:验证和清除用户输入和其他变量
02-25
XValidator
验证并清除用户输入和其他变量。
该库不仅允许您验证所有用户输入(POST,GET,REQUEST,COOKIE,SESSION),而且可以快速,轻松地清理它们。 有许多预定义的过滤器可以使用,您也可以创建自定义验证和消毒剂。
入门
假设您有一个$ _POST数组,其中包含通过简单HTML网络表单发送的用户数据:
简单输入:真实姓名(最多100个字符)
高级输入:用户名(仅字母数字字符)
日期选择器:生日(日期格式)
高级输入:电子邮件(电子邮件格式,并检查电子邮件是否已在使用中)
高级输入:密码(出于安全目的,最少8个字符,大写,小写,数字和特殊字符)
选择:性别(只能选择“男性”或“女性”)
简单复选框:接受服务条款(布尔值)
多项选择:选择自己喜欢的馅饼(苹果,奶油,巧克力)(您必须至少选择一个饼)
多项选择:选择自己喜欢的饮料(可乐,水,牛
validator-表单验证神器
JackieDYH的博客
06-07
6332
一个字符串验证和过滤库,能够做到我们常规应用开发中各种验证方式,比如是否包含某个字符串,字符串的长度类型等等,完全能满足我们日常的前端开发,并且还可以在服务端使用
后端数据校验之Validator的使用方法
m0_72167535的博客
12-04
3872
后端数据校验之Validator的使用方法
后端数据校验之Validator使用
m0_61136590的博客
04-06
653
springboot项目对前端传入参数进行校验,减少业务代码冗余
SpringBoot参数校验及原理解析
ab279350608的专栏
06-04
1876
本文主要介绍SpringBoot的参数校验。首先介绍基本用法,接着介绍高阶用法,最后通过深入Spring以及Hibernate Validator源码讲解实现原理
SpringBoot参数校验
ppjsyw的博客
04-23
9939
使用传统方式的弊端
我们先看一下传统的做法
public String addUser(User user) {
if (user == null || user.getId() == null || user.getAccount() == null || user.getPassword() == null || user.getEmail() == null) {
return "对象或者对象字段不能为空";
}
if (StringUtils.isEm
Spring Validation参数效验各种使用姿势
2301_76607156的博客
03-20
1307
定义的分组接口,继承Default接口。复制代码自定义校验规则小杰在工作当中用的比较少。大部分业务需求使用自带的注解已经够平常开发了。当然自定义validation规则也非常简单。这里使用校验电话号码是否合法来举例!别抬杠,说我为什么不用@Pattern(regexp = "^1[3456789]\\d{9}$",message = "手机号格式不正确")直接实现。对不起,我不想每次写正则。自定义注解Phone,跟着内置的注解照葫芦画瓢。不过的值要指定我们自定义的约束验证器!
【java学习】参数校验
午后阳光
03-14
6710
1,概念
在web开发中,前端的参数校验是为了用户体验,后端的参数校验是为了安全。
参数有两种形式:
(1)查询字符串参数(Query String Parameters参数)
一般用于GET请求,会以url string的形式进行传递
(2)请求体参数(Request Body)
一般用于POST请求,可以使用Content-Type来指定不同参数类型
2,校验注解
注解
说明
备注
@AssertFalse
所注解的元素必须是Boolean类型,且值为false
@AssertTr
通过自定义一个 validator,一次搞懂参数校验的全流程流程
weixin_45701550的博客
07-02
3036
自定义个一个validator需要一下4个步骤。我们需要定义一个自定义注解来标记需要进行验证的字段。注解可以包含自定义的属性,用于指定验证规则的细节。例如,我们可以定义一个名为@CustomValidator的注解,并在其中定义一些属性,如错误消息、验证分组等。Class
参数校验 学习
黑橙子君的博客
11-13
379
文章目录所需依赖注解正则解释JSR提供的校验注解Hibernate Validator提供的校验注解验证Controller的输入相关资料
所需依赖
注解
正则解释
参数校验
weixin_39661670的博客
10-25
1787
参数校验:
单个参数校验:
@RestController
@Validated
public class PingController {
@GetMapping("/getUser")
public String getUserStr(@NotNull(message = "name 不能为空") String name,
@Max(value = 99, message = "不能大于99岁") Integer age) {
如何进行数据验证(validator)
m0_65503310的博客
05-13
2997
Angular 中有两种表单:
Template-Driven Forms - 模板驱动式表单 (类似于 AngularJS 1.x 中的表单 )
Reactive Forms - 响应式表单
我们主要使用响应式表单来进行validator方法验证
首先在 @NgModule 中导入 @angular/forms 库中的 ReactiveFormsModule:
app.module.ts
import { ReactiveFormsModule } from '@angu
编码技巧——参数校验
娜娜米的博客
04-16
809
在日常开发写HTTP接口时,无论是对于C端接口,还是管理后台接口,接口参数校验这一部分是必须的;有一些设计业务逻辑的参数校验是可以自己去做,用状态码返回提示和message;但是一些简单参数的校验,如非空、非空字符串、集合大小等,这些如果全部用代码去做,显得十分麻烦,代码也会失去优雅性;
常见的一些校验:库存填写,要做非空、数值范围为正整数、数值上限的校验;用户名设置,需要做非空、非空字符串、字符最大最小个数的校验;
Spring提供了这部分功能,一些基本参数的校验是可以满足的,本篇介绍一下用法;
一文了解Validator库
最新发布
chenjiazhanxiao的博客
09-01
145
本文介绍了 Go 语言中的库,该库用于对结构体字段进行验证。文章从一个简单的问题出发,引入了Validator库的使用。之后介绍了Validator库的基本使用,包括如何创建验证实例、执行验证以及处理验证错误。通过示例代码,演示了如何使用标签来设置验证规则,以及如何通过Validator库简化数据验证过程,提高代码的可读性和可维护性。总的来说,在比较复杂的场景,通过使用Validator库,我们可以专注于验证逻辑的编写,而不必担心数据结构的解析和重复的验证代码,能够很好得提高代码的可读性和可维护性。
vue:vue-validator详解
08-30
Vue是一种用于构建用户界面的渐进式JavaScript框架,而vue-validator是一个为Vue.js提供数据验证的插件。
vue-validator允许我们在Vue组件中定义验证规则,以确保用户输入的数据符合预期。它提供了一种简洁和灵活的方式来处理表单验证,可以方便地与Vue的数据绑定机制结合使用。
使用vue-validator,我们可以定义验证规则并将其应用于表单输入控件。它支持多种验证规则,如必填、最大长度、最小长度、正则表达式等。我们可以根据需要选择适当的规则,并将其应用于表单控件的v-model指令上。
验证结果可以以不同的方式呈现给用户。vue-validator提供了多种内置的验证指令,如v-validate、v-minLength、v-maxLength等,我们可以将这些指令应用于表单输入控件上,以显示验证结果。此外,我们还可以自定义验证指令,以满足具体项目的需求。
除了基本的验证功能,vue-validator还提供了一些高级功能。比如,它可以在异步验证过程中显示加载状态,并根据后端返回的验证结果更新界面。此外,它还支持字段间的依赖验证,即一个字段的验证结果依赖于其他字段的值。
总之,vue-validator是一个非常有用的插件,使得表单验证变得简单和灵活。它与Vue.js良好地集成,提供了丰富的验证规则和灵活的验证指令,可满足各种验证需求。无论是简单的表单验证还是复杂的数据验证,vue-validator都可以帮助我们轻松地实现。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
一样的霸笔
CSDN认证博客专家
CSDN认证企业博客
码龄7年
企业员工
7
原创
32万+
周排名
132万+
总排名
5万+
访问
等级
363
积分
12
粉丝
46
获赞
10
评论
217
收藏
私信
关注
热门文章
参数校验(validator)详解
34227
JAVA 日期时间比较
3677
SkyWalking6.2.0告警配置详解
2901
@JsonProperty 和@JSONField用法和区别
2576
JAVA使用easyexcel操作Excel
2058
分类专栏
使用技巧
实用技巧
1篇
linux
1篇
实用技术
3篇
spring源码分析
最新评论
参数校验(validator)详解
yudian0427:
A component required a bean of type 'javax.validation.Validator' that could not be found.
数据库字段为什么设置为Not Null更优化
花花归你 你归我:
索引分裂在你的文章中应该表现是当索引有null转为非null时所在列会重新为他添加索引,相当于插入一条数据在表中间,这样就有可能导致B+数索引所在页超出页内存的90%,B+在遇到页内存超过90%的时候会发生页分裂,位于页最中间的索引会向上插入到父级索引页,本页的左右两边分裂成新的页,由于本页中间索引向上插入,又有可能引起父级索引页的分裂,导致数据库性能下降。大致就是这样需要详情的可以看看视频具体了解下。
linux 服务器查日志匹配关键字前后N行
一样的霸笔:
类似grep -5 "xxx" /xxx/xxx.log 这个命令
linux 服务器查日志匹配关键字前后N行
席尔洛的阴谋:
$grep -5 '====需求计划量===' inputfile
我照着你那写的,命令报错了
参数校验(validator)详解
一样的霸笔:
在参数对象的数组属性上List
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
JAVA 日期时间比较
@JsonProperty 和@JSONField用法和区别
linux常用命令之日志查询
2021年5篇
2019年17篇
目录
目录
分类专栏
使用技巧
实用技巧
1篇
linux
1篇
实用技术
3篇
spring源码分析
目录
评论 4
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
jQuery Validate | 菜鸟教程
菜鸟教程 -- 学的不仅是技术,更是梦想!
首页
HTML
CSS
JavaScript
Vue
Bootstrap
NodeJS
Python3
Python2
Java
C
C++
C#
Go
SQL
Linux
jQuery
本地书签
首页
HTML
CSS
JS
本地书签
Search
Python3 教程
Python2 教程
Vue3 教程
vue2 教程
Bootstrap3 教程
Bootstrap4 教程
Bootstrap5 教程
Bootstrap2 教程
jQuery 教程
jQuery 教程
jQuery 简介
jQuery 安装
jQuery 语法
jQuery 选择器
jQuery 事件
jQuery 效果
jQuery 隐藏/显示
jQuery 淡入淡出
jQuery 滑动
jQuery 动画
jQuery 停止动画
jQuery Callback
jQuery 链
jQuery HTML
jQuery 捕获
jQuery 设置
jQuery 添加元素
jQuery 删除元素
jQuery CSS 类
jQuery css() 方法
jQuery 尺寸
jQuery 遍历
jQuery 遍历
jQuery 祖先
jQuery 后代
jQuery 同胞
jQuery 过滤
jQuery Ajax
jQuery AJAX 简介
jQuery load() 方法
jQuery get()/post() 方法
jQuery 其他
jQuery noConflict() 方法
jQuery JSONP
jQuery 实例
jQuery 实例
jQuery 参考手册
jQuery 选择器
jQuery 事件方法
jQuery 效果方法
jQuery HTML / CSS 方法
jQuery 遍历方法
jQuery AJAX 方法
jQuery 杂项方法
jQuery 属性
jQuery 插件
jQuery Validate
jQuery Cookie
jQuery Accordion
jQuery Autocomplete
jQuery Growl
jQuery 密码验证
jQuery Prettydate
jQuery Tooltip
jQuery Treeview
jQuery 属性
jQuery Accordion
jQuery Validate
jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求。该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API。所有的捆绑方法默认使用英语作为错误信息,且已翻译成其他 37 种语言。
该插件是由 Jörn Zaefferer 编写和维护的,他是 jQuery 团队的一名成员,是 jQuery UI 团队的主要开发人员,是 QUnit 的维护人员。该插件在 2006 年 jQuery 早期的时候就已经开始出现,并一直更新至今。目前版本是 1.14.0。
访问 jQuery Validate 官网,下载最新版的 jQuery Validate 插件。
导入 js 库(使用字节跳动提供的CDN)
默认校验规则
序号
规则
描述
1
required:true
必须输入的字段。
2
remote:"check.php"
使用 ajax 方法调用 check.php 验证输入值。
3
email:true
必须输入正确格式的电子邮件。
4
url:true
必须输入正确格式的网址。
5
date:true
必须输入正确格式的日期。日期校验 ie6 出错,慎用。
6
dateISO:true
必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。
7
number:true
必须输入合法的数字(负数,小数)。
8
digits:true
必须输入整数。
9
creditcard:
必须输入合法的信用卡号。
10
equalTo:"#field"
输入值必须和 #field 相同。
11
accept:
输入拥有合法后缀名的字符串(上传文件的后缀)。
12
maxlength:5
输入长度最多是 5 的字符串(汉字算一个字符)。
13
minlength:10
输入长度最小是 10 的字符串(汉字算一个字符)。
14
rangelength:[5,10]
输入长度必须介于 5 和 10 之间的字符串(汉字算一个字符)。
15
range:[5,10]
输入值必须介于 5 和 10 之间。
16
max:5
输入值不能大于 5。
17
min:10
输入值不能小于 10。
默认提示
messages: {
required: "This field is required.",
remote: "Please fix this field.",
email: "Please enter a valid email address.",
url: "Please enter a valid URL.",
date: "Please enter a valid date.",
dateISO: "Please enter a valid date ( ISO ).",
number: "Please enter a valid number.",
digits: "Please enter only digits.",
creditcard: "Please enter a valid credit card number.",
equalTo: "Please enter the same value again.",
maxlength: $.validator.format( "Please enter no more than {0} characters." ),
minlength: $.validator.format( "Please enter at least {0} characters." ),
rangelength: $.validator.format( "Please enter a value between {0} and {1} characters long." ),
range: $.validator.format( "Please enter a value between {0} and {1}." ),
max: $.validator.format( "Please enter a value less than or equal to {0}." ),
min: $.validator.format( "Please enter a value greater than or equal to {0}." )
}
jQuery Validate提供了中文信息提示包,位于下载包的 dist/localization/messages_zh.js,内容如下:
(function( factory ) {
if ( typeof define === "function" && define.amd ) {
define( ["jquery", "../jquery.validate"], factory );
} else {
factory( jQuery );
}
}(function( $ ) {
/*
* Translated default messages for the jQuery validation plugin.
* Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, 漢語)
*/
$.extend($.validator.messages, {
required: "这是必填字段",
remote: "请修正此字段",
email: "请输入有效的电子邮件地址",
url: "请输入有效的网址",
date: "请输入有效的日期",
dateISO: "请输入有效的日期 (YYYY-MM-DD)",
number: "请输入有效的数字",
digits: "只能输入数字",
creditcard: "请输入有效的信用卡号码",
equalTo: "你的输入不相同",
extension: "请输入有效的后缀",
maxlength: $.validator.format("最多可以输入 {0} 个字符"),
minlength: $.validator.format("最少要输入 {0} 个字符"),
rangelength: $.validator.format("请输入长度在 {0} 到 {1} 之间的字符串"),
range: $.validator.format("请输入范围在 {0} 到 {1} 之间的数值"),
max: $.validator.format("请输入不大于 {0} 的数值"),
min: $.validator.format("请输入不小于 {0} 的数值")
});
}));
你可以将该本地化信息文件 dist/localization/messages_zh.js 引入到页面:
使用方式
1、将校验规则写到控件中
尝试一下 »
2、将校验规则写到 js 代码中
$().ready(function() {
// 在键盘按下并释放及提交后验证提交表单
$("#signupForm").validate({
rules: {
firstname: "required",
lastname: "required",
username: {
required: true,
minlength: 2
},
password: {
required: true,
minlength: 5
},
confirm_password: {
required: true,
minlength: 5,
equalTo: "#password"
},
email: {
required: true,
email: true
},
topic: {
required: "#newsletter:checked",
minlength: 2
},
agree: "required"
},
messages: {
firstname: "请输入您的名字",
lastname: "请输入您的姓氏",
username: {
required: "请输入用户名",
minlength: "用户名必需由两个字符组成"
},
password: {
required: "请输入密码",
minlength: "密码长度不能小于 5 个字符"
},
confirm_password: {
required: "请输入密码",
minlength: "密码长度不能小于 5 个字符",
equalTo: "两次密码输入不一致"
},
email: "请输入一个正确的邮箱",
agree: "请接受我们的声明",
topic: "请选择两个主题"
}
})
});
messages 处,如果某个控件没有 message,将调用默认的信息
尝试一下 »
required: true 值是必须的。
required: "#aa:checked" 表达式的值为真,则需要验证。
required: function(){} 返回为真,表示需要验证。
后边两种常用于,表单中需要同时填或不填的元素。
常用方法及注意问题
1、用其他方式替代默认的 SUBMIT
$().ready(function() {
$("#signupForm").validate({
submitHandler:function(form){
alert("提交事件!");
form.submit();
}
});
});
使用 ajax 方式
$(".selector").validate({
submitHandler: function(form)
{
$(form).ajaxSubmit();
}
})
可以设置 validate 的默认值,写法如下:
$.validator.setDefaults({
submitHandler: function(form) { alert("提交事件!");form.submit(); }
});
如果想提交表单, 需要使用 form.submit(),而不要使用 $(form).submit()。
2、debug,只验证不提交表单
如果这个参数为true,那么表单不会提交,只进行检查,调试时十分方便。
$().ready(function() {
$("#signupForm").validate({
debug:true
});
});
如果一个页面中有多个表单都想设置成为 debug,则使用:
$.validator.setDefaults({
debug: true
})
3、ignore:忽略某些元素不验证
ignore: ".ignore"
4、更改错误信息显示的位置
errorPlacement:Callback
指明错误放置的位置,默认情况是:error.appendTo(element.parent());即把错误信息放在验证的元素后面。
errorPlacement: function(error, element) {
error.appendTo(element.parent());
}
实例
将错误信息放在 label 元素后并使用 span 元素包裹它
尝试一下 »
代码的作用是:一般情况下把错误信息显示在
参数
类型
描述
默认值
errorClass
String
指定错误提示的 css 类名,可以自定义错误提示的样式。
"error"
errorElement
String
用什么标签标记错误,默认是 label,可以改成 em。
"label"
errorContainer
Selector
显示或者隐藏验证信息,可以自动实现有错误信息出现时把容器属性变为显示,无错误时隐藏,用处不大。errorContainer: "#messageBox1, #messageBox2"
errorLabelContainer
Selector
把错误信息统一放在一个容器里面。
wrapper
String
用什么标签再把上边的 errorELement 包起来。
一般这三个属性同时使用,实现在一个容器内显示所有错误提示的功能,并且没有信息时自动隐藏。
errorContainer: "div.error",
errorLabelContainer: $("#signupForm div.error"),
wrapper: "li"
5、更改错误信息显示的样式
设置错误提示的样式,可以增加图标显示,在该系统中已经建立了一个 validation.css,专门用于维护校验文件的样式。
input.error { border: 1px solid red; }
label.error {
background:url("./demo/images/unchecked.gif") no-repeat 0px 0px;
padding-left: 16px;
padding-bottom: 2px;
font-weight: bold;
color: #EA5200;
}
label.checked {
background:url("./demo/images/checked.gif") no-repeat 0px 0px;
}
6、每个字段验证通过执行函数
success:String,Callback
要验证的元素通过验证后的动作,如果跟一个字符串,会当作一个 css 类,也可跟一个函数。
success: function(label) {
// set as text for IE
label.html(" ").addClass("checked");
//label.addClass("valid").text("Ok!")
}
添加 "valid" 到验证元素,在 CSS 中定义的样式 。
success: "valid"
7、验证的触发方式修改
下面的虽然是 boolean 型的,但建议除非要改为 false,否则别乱添加。
触发方式
类型
描述
默认值
onsubmit
Boolean
提交时验证。设置为 false 就用其他方法去验证。
true
onfocusout
Boolean
失去焦点时验证(不包括复选框/单选按钮)。
true
onkeyup
Boolean
在 keyup 时验证。
true
onclick
Boolean
在点击复选框和单选按钮时验证。
true
focusInvalid
Boolean
提交表单后,未通过验证的表单(第一个或提交之前获得焦点的未通过验证的表单)会获得焦点。
true
focusCleanup
Boolean
如果是 true 那么当未通过验证的元素获得焦点时,移除错误提示。避免和 focusInvalid 一起用。
false
// 重置表单
$().ready(function() {
var validator = $("#signupForm").validate({
submitHandler:function(form){
alert("submitted");
form.submit();
}
});
$("#reset").click(function() {
validator.resetForm();
});
});
8、异步验证
remote:URL
使用 ajax 方式进行验证,默认会提交当前验证的值到远程地址,如果需要提交其他的值,可以使用 data 选项。
remote: "check-email.php"
remote: {
url: "check-email.php", //后台处理程序
type: "post", //数据发送方式
dataType: "json", //接受数据格式
data: { //要传递的数据
username: function() {
return $("#username").val();
}
}
}
远程地址只能输出 "true" 或 "false",不能有其他输出。
9、添加自定义校验
addMethod:name, method, message
自定义验证方法
// 中文字两个字节
jQuery.validator.addMethod("byteRangeLength", function(value, element, param) {
var length = value.length;
for(var i = 0; i < value.length; i++){
if(value.charCodeAt(i) > 127){
length++;
}
}
return this.optional(element) || ( length >= param[0] && length <= param[1] );
}, $.validator.format("请确保输入的值在{0}-{1}个字节之间(一个中文字算2个字节)"));
// 邮政编码验证
jQuery.validator.addMethod("isZipCode", function(value, element) {
var tel = /^[0-9]{6}$/;
return this.optional(element) || (tel.test(value));
}, "请正确填写您的邮政编码");
注意:要在 additional-methods.js 文件中添加或者在 jquery.validate.js 文件中添加。建议一般写在 additional-methods.js 文件中。
注意:在 messages_cn.js 文件中添加:isZipCode: "只能包括中文字、英文字母、数字和下划线"。调用前要添加对 additional-methods.js 文件的引用。
10、radio 和 checkbox、select 的验证
radio 的 required 表示必须选中一个。
checkbox 的 required 表示必须选中。
checkbox 的 minlength 表示必须选中的最小个数,maxlength 表示最大的选中个数,rangelength:[2,3] 表示选中个数区间。
select 的 required 表示选中的 value 不能为空。
select 的 minlength 表示选中的最小个数(可多选的 select),maxlength 表示最大的选中个数,rangelength:[2,3] 表示选中个数区间。
jQuery.validate 中文 API
名称
返回类型
描述
validate(options)
Validator
验证所选的 FORM。
valid()
Boolean
检查是否验证通过。
rules()
Options
返回元素的验证规则。
rules("add",rules)
Options
增加验证规则。
rules("remove",rules)
Options
删除验证规则。
removeAttrs(attributes)
Options
删除特殊属性并且返回它们。
自定义选择器
:blank
Validator
没有值的筛选器。
:filled
Array
有值的筛选器。
:unchecked
Array
没选择的元素的筛选器。
实用工具
jQuery.format(template,argument,argumentN...)
String
用参数代替模板中的 {n}。
Validator
validate 方法返回一个 Validator 对象。Validator 对象有很多方法可以用来引发校验程序或者改变 form 的内容,下面列出几个常用的方法。
名称
返回类型
描述
form()
Boolean
验证 form 返回成功还是失败。
element(element)
Boolean
验证单个元素是成功还是失败。
resetForm()
undefined
把前面验证的 FORM 恢复到验证前原来的状态。
showErrors(errors)
undefined
显示特定的错误信息。
Validator 函数
setDefaults(defaults)
undefined
改变默认的设置。
addMethod(name,method,message)
undefined
添加一个新的验证方法。必须包括一个独一无二的名字,一个 JAVASCRIPT 的方法和一个默认的信息。
addClassRules(name,rules)
undefined
增加组合验证类型,在一个类里面用多种验证方法时比较有用。
addClassRules(rules)
undefined
增加组合验证类型,在一个类里面用多种验证方法时比较有用。这个是同时加多个验证方法。
内置验证方式
名称
返回类型
描述
required()
Boolean
必填验证元素。
required(dependency-expression)
Boolean
必填元素依赖于表达式的结果。
required(dependency-callback)
Boolean
必填元素依赖于回调函数的结果。
remote(url)
Boolean
请求远程校验。url 通常是一个远程调用方法。
minlength(length)
Boolean
设置最小长度。
maxlength(length)
Boolean
设置最大长度。
rangelength(range)
Boolean
设置一个长度范围 [min,max]。
min(value)
Boolean
设置最小值。
max(value)
Boolean
设置最大值。
email()
Boolean
验证电子邮箱格式。
range(range)
Boolean
设置值的范围。
url()
Boolean
验证 URL 格式。
date()
Boolean
验证日期格式(类似 30/30/2008 的格式,不验证日期准确性只验证格式)。
dateISO()
Boolean
验证 ISO 类型的日期格式。
dateDE()
Boolean
验证德式的日期格式(29.04.1994 或 1.1.2006)。
number()
Boolean
验证十进制数字(包括小数的)。
digits()
Boolean
验证整数。
creditcard()
Boolean
验证信用卡号。
accept(extension)
Boolean
验证相同后缀名的字符串。
equalTo(other)
Boolean
验证两个输入框的内容是否相同。
phoneUS()
Boolean
验证美式的电话号码。
validate ()的可选项
描述
代码
debug:进行调试模式(表单不提交)。
$(".selector").validate
({
debug:true
})
把调试设置为默认。
$.validator.setDefaults({
debug:true
})
submitHandler:通过验证后运行的函数,里面要加上表单提交的函数,否则表单不会提交。
$(".selector").validate({
submitHandler:function(form) {
$(form).ajaxSubmit();
}
})
ignore:对某些元素不进行验证。
$("#myform").validate({
ignore:".ignore"
})
rules:自定义规则,key:value 的形式,key 是要验证的元素,value 可以是字符串或对象。
$(".selector").validate({
rules:{
name:"required",
email:{
required:true,
email:true
}
}
})
messages:自定义的提示信息,key:value 的形式,key 是要验证的元素,value 可以是字符串或函数。
$(".selector").validate({
rules:{
name:"required",
email:{
required:true,
email:true
}
},
messages:{
name:"Name不能为空",
email:{
required:"E-mail不能为空",
email:"E-mail地址不正确"
}
}
})
groups:对一组元素的验证,用一个错误提示,用 errorPlacement 控制把出错信息放在哪里。
$("#myform").validate({
groups:{
username:"fname
lname"
},
errorPlacement:function(error,element) {
if (element.attr("name") == "fname" || element.attr("name") == "lname")
error.insertAfter("#lastname");
else
error.insertAfter(element);
},
debug:true
})
OnSubmit:类型 Boolean,默认 true,指定是否提交时验证。
$(".selector").validate({
onsubmit:false
})
onfocusout:类型 Boolean,默认 true,指定是否在获取焦点时验证。
$(".selector").validate({
onfocusout:false
})
onkeyup:类型 Boolean,默认 true,指定是否在敲击键盘时验证。
$(".selector").validate({
onkeyup:false
})
onclick:类型 Boolean,默认 true,指定是否在鼠标点击时验证(一般验证 checkbox、radiobox)。
$(".selector").validate({
onclick:false
})
focusInvalid:类型 Boolean,默认 true。提交表单后,未通过验证的表单(第一个或提交之前获得焦点的未通过验证的表单)会获得焦点。
$(".selector").validate({
focusInvalid:false
})
focusCleanup:类型 Boolean,默认 false。当未通过验证的元素获得焦点时,移除错误提示(避免和 focusInvalid 一起使用)。
$(".selector").validate({
focusCleanup:true
})
errorClass:类型 String,默认 "error"。指定错误提示的 css 类名,可以自定义错误提示的样式。
$(".selector").validate({
errorClass:"invalid"
})
errorElement:类型 String,默认 "label"。指定使用什么标签标记错误。
$(".selector").validate
errorElement:"em"
})
wrapper:类型 String,指定使用什么标签再把上边的 errorELement 包起来。
$(".selector").validate({
wrapper:"li"
})
errorLabelContainer:类型 Selector,把错误信息统一放在一个容器里面。
$("#myform").validate({
errorLabelContainer:"#messageBox",
wrapper:"li",
submitHandler:function() {
alert("Submitted!")
}
})
showErrors:跟一个函数,可以显示总共有多少个未通过验证的元素。
$(".selector").validate({
showErrors:function(errorMap,errorList) {
$("#summary").html("Your form contains " + this.numberOfInvalids() + " errors,see details below.");
this.defaultShowErrors();
}
})
errorPlacement:跟一个函数,可以自定义错误放到哪里。
$("#myform").validate({
errorPlacement:function(error,element) {
error.appendTo(element.parent("td").next("td"));
},
debug:true
})
success:要验证的元素通过验证后的动作,如果跟一个字符串,会当作一个 css 类,也可跟一个函数。
$("#myform").validate({
success:"valid",
submitHandler:function() {
alert("Submitted!")
}
})
highlight:可以给未通过验证的元素加效果、闪烁等。
addMethod(name,method,message)方法
参数 name 是添加的方法的名字。
参数 method 是一个函数,接收三个参数 (value,element,param) 。
value 是元素的值,element 是元素本身,param 是参数。
我们可以用 addMethod 来添加除内置的 Validation 方法之外的验证方法。比如有一个字段,只能输一个字母,范围是 a-f,写法如下:
$.validator.addMethod("af",function(value,element,params){
if(value.length>1){
return false;
}
if(value>=params[0] && value<=params[1]){
return true;
}else{
return false;
}
},"必须是一个字母,且a-f");
如果有个表单字段的 name="username",则在 rules 中写:
username:{
af:["a","f"]
}
addMethod 的第一个参数,是添加的验证方法的名字,这时是 af。
addMethod 的第三个参数,是自定义的错误提示,这里的提示为:"必须是一个字母,且a-f"。
addMethod 的第二个参数,是一个函数,这个比较重要,决定了用这个验证方法时的写法。
如果只有一个参数,直接写,比如 af:"a",那么 a 就是这个唯一的参数,如果多个参数,则写在 [] 里,用逗号分开。
meta String 方式
$("#myform").validate({
meta:"validate",
submitHandler:function() {
alert("Submitted!") }
})
实例下载
完整代码:Downloading。
jQuery 属性
jQuery Accordion
点我分享笔记
取消
分享笔记
昵称昵称 (必填)
邮箱邮箱 (必填)
引用地址引用地址
分类导航
HTML / CSSHTML 教程HTML5 教程CSS 教程CSS3 教程Bootstrap3 教程Bootstrap4 教程Bootstrap5 教程Font Awesome 教程Foundation 教程 JavaScriptJavaScript 教程HTML DOM 教程jQuery 教程AngularJS 教程AngularJS2 教程Vue.js 教程Vue3 教程React 教程TypeScript 教程jQuery UI 教程jQuery EasyUI 教程Node.js 教程AJAX 教程JSON 教程Echarts 教程Chart.js 教程Highcharts 教程Google 地图 教程 服务端Python 教程Python2.x 教程Linux 教程Docker 教程Ruby 教程Java 教程C 教程C++ 教程Perl 教程Servlet 教程JSP 教程Lua 教程Rust 教程Scala 教程Go 教程PHP 教程数据结构与算法Django 教程FastAPI 教程Zookeeper 教程设计模式正则表达式Maven 教程Verilog 教程ASP 教程AppML 教程VBScript 教程 数据库SQL 教程MySQL 教程PostgreSQL 教程SQLite 教程MongoDB 教程Redis 教程Memcached 教程 数据分析Python 教程NumPy 教程Pandas 教程Matplotlib 教程Scipy 教程R 教程Julia 教程 移动端Android 教程Swift 教程jQuery Mobile 教程ionic 教程Kotlin 教程 XML 教程XML 教程DTD 教程XML DOM 教程XSLT 教程XPath 教程XQuery 教程XLink 教程XPointer 教程XML Schema 教程XSL-FO 教程SVG 教程 ASP.NETASP.NET 教程C# 教程Web Pages 教程Razor 教程MVC 教程Web Forms 教程 Web ServiceWeb Service 教程WSDL 教程SOAP 教程RSS 教程RDF 教程 开发工具Eclipse 教程Git 教程Svn 教程Markdown 教程 网站建设HTTP 教程网站建设指南浏览器信息网站主机教程TCP/IP 教程W3C 教程网站品质
Advertisement
反馈/建议
在线实例
·HTML 实例
·CSS 实例
·JavaScript 实例
·Ajax 实例
·jQuery 实例
·XML 实例
·Java 实例
字符集&工具
· HTML 字符集设置
· HTML ASCII 字符集
· JS 混淆/加密
· PNG/JPEG 图片压缩
· HTML 拾色器
· JSON 格式化工具
· 随机数生成器
最新更新
·
Rust 宏
·
Seaborn 教程
·
Pandas 相关性分析
·
31.2k star, 免...
·
Dev Home —...
·
免费开源的 AI ...
·
11.2k star, 免...
站点信息
·
意见反馈
·
免责声明
·
关于我们
·
文章归档
关注微信
Copyright © 2013-2024 菜鸟教程
runoob.com All Rights Reserved. 备案号:闽ICP备15012807号-1
微信关注
学会使用validator库,看这一篇就够用了 - 知乎切换模式写文章登录/注册学会使用validator库,看这一篇就够用了Golang梦工厂前言哈喽,大家好,我是asong。这是我的第十篇原创文章。这周在公司做项目,在做API部分开发时,需要对请求参数的校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。最开始在做这一部分的时候,我采用老方法,自己编写参数检验方法,统一进行参数验证。后来在同事CR的时候,说GIN有更好的参数检验方法,gin框架使用github.com/go-playground/validator进行参数校验,我们只需要在定义结构体时使用binding或validatetag标识相关校验规则,就可以进行参数校验了,很方便。相信也有很多小伙伴不知道这个功能,今天就来介绍一下这部分。快速安装使用之前,我们先要获取validator这个库。# 第一次安装使用如下命令
$ go get github.com/go-playground/validator/v10
# 项目中引入包
import "github.com/go-playground/validator/v10"
简单示例安装还是很简单的,下面我先来一个官方样例,看看是怎么使用的,然后展开分析。package main
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
)
type RegisterRequest struct {
Username string `json:"username" binding:"required"`
Nickname string `json:"nickname" binding:"required"`
Email string `json:"email" binding:"required,email"`
Password string `json:"password" binding:"required"`
Age uint8 `json:"age" binding:"gte=1,lte=120"`
}
func main() {
router := gin.Default()
router.POST("register", Register)
router.Run(":9999")
}
func Register(c *gin.Context) {
var r RegisterRequest
err := c.ShouldBindJSON(&r)
if err != nil {
fmt.Println("register failed")
c.JSON(http.StatusOK, gin.H{"msg": err.Error()})
return
}
//验证 存储操作省略.....
fmt.Println("register success")
c.JSON(http.StatusOK, "successful")
}
测试curl --location --request POST 'http://localhost:9999/register' \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "asong",
"nickname": "golang梦工厂",
"email": "7418.com",
"password": "123",
"age": 140
}'
返回结果{
"msg": "Key: 'RegisterRequest.Email' Error:Field validation for 'Email' failed on the 'email' tag\nKey: 'RegisterRequest.Age' Error:Field validation for 'Age' failed on the 'lte' tag"
}
看这个输出结果,我们可以看到validator的检验生效了,email字段不是一个合法邮箱,age字段超过了最大限制。我们只在结构体中添加tag就解决了这个问题,是不是很方便,下面我们就来学习一下具体使用。validator库gin框架是使用validator.v10这个库来进行参数验证的,所以我们先来看看这个库的使用。先安装这个库:$ go get github.com/go-playground/validator/v10
然后先写一个简单的示例:package main
import (
"fmt"
"github.com/go-playground/validator/v10"
)
type User struct {
Username string `validate:"min=6,max=10"`
Age uint8 `validate:"gte=1,lte=10"`
Sex string `validate:"oneof=female male"`
}
func main() {
validate := validator.New()
user1 := User{Username: "asong", Age: 11, Sex: "null"}
err := validate.Struct(user1)
if err != nil {
fmt.Println(err)
}
user2 := User{Username: "asong111", Age: 8, Sex: "male"}
err = validate.Struct(user2)
if err != nil {
fmt.Println(err)
}
}
我们在结构体定义validator标签的tag,使用validator.New()创建一个验证器,这个验证器可以指定选项、添加自定义约束,然后在调用他的Struct()方法来验证各种结构对象的字段是否符合定义的约束。上面的例子,我们在User结构体中,有三个字段:Name:通过min和max来进行约束,Name的字符串长度为[6,10]之间。Age:通过gte和lte对年轻的范围进行约束,age的大小大于1,小于10。Sex:通过oneof对值进行约束,只能是所列举的值,oneof列举出性别为男士 和女士 (不是硬性规定奥,可能还有别的性别)。所以user1会进行报错,错误信息如下:Key: 'User.Name' Error:Field validation for 'Name' failed on the 'min' tag
Key: 'User.Age' Error:Field validation for 'Age' failed on the 'lte' tag
Key: 'User.Sex' Error:Field validation for 'Sex' failed on the 'oneof' tag
各个字段违反了什么约束,一眼我们便能从错误信息中看出来。看完了简单示例,下面我就来看一看都有哪些tag,我们都可以怎么使用。本文不介绍所有的tag,更多使用方法,请到官方文档自行学习。字符串约束excludesall:不包含参数中任意的 UNICODE 字符,例如excludesall=ab; excludesrune:不包含参数表示的 rune 字符,excludesrune=asong; startswith:以参数子串为前缀,例如startswith=hi; endswith:以参数子串为后缀,例如endswith=bye。 contains=:包含参数子串,例如contains=email; containsany:包含参数中任意的 UNICODE 字符,例如containsany=ab; containsrune:包含参数表示的 rune 字符,例如`containsrune=asong; excludes:不包含参数子串,例如excludes=email; 范围约束范围约束的字段类型分为三种:对于数值,我们则可以约束其值对于切片、数组和map,我们则可以约束其长度对于字符串,我们则可以约束其长度常用tag介绍:ne:不等于参数值,例如ne=5;gt:大于参数值,例如gt=5;gte:大于等于参数值,例如gte=50;lt:小于参数值,例如lt=50;lte:小于等于参数值,例如lte=50;oneof:只能是列举出的值其中一个,这些值必须是数值或字符串,以空格分隔,如果字符串中有空格,将字符串用单引号包围,例如oneof=male female。eq:等于参数值,注意与len不同。对于字符串,eq约束字符串本身的值,而len约束字符串长度。例如eq=10;len:等于参数值,例如len=10;max:小于等于参数值,例如max=10;min:大于等于参数值,例如min=10Fields约束eqfield:定义字段间的相等约束,用于约束同一结构体中的字段。例如:eqfield=Passwordeqcsfield:约束统一结构体中字段等于另一个字段(相对),确认密码时可以使用,例如:eqfiel=ConfirmPasswordnefield:用来约束两个字段是否相同,确认两种颜色是否一致时可以使用,例如:nefield=Color1necsfield:约束两个字段是否相同(相对)常用约束unique:指定唯一性约束,不同类型处理不同: 对于map,unique约束没有重复的值对于数组和切片,unique没有重复的值对于元素类型为结构体的碎片,unique约束结构体对象的某个字段不重复,使用unique=field指定字段名email:使用email来限制字段必须是邮件形式,直接写eamil即可,无需加任何指定。 omitempty:字段未设置,则忽略 -:跳过该字段,不检验; |:使用多个约束,只需要满足其中一个,例如rgb|rgba; required:字段必须设置,不能为默认值; 好啦,就介绍这些常用的约束,更多约束学习请到文档自行学习吧,都有example供你学习,很快的。gin中的参数校验学习了validator,我们也就知道了怎么在gin中使用参数校验了。这些约束是都没有变的,在validator中,我们直接结构体中将约束放到validate tag中,同样道理,在gin中我们只需将约束放到bindingtag中就可以了。是不是很简单。但是有些时候,并不是所有的参数校验都能满足我们的需求,所以我们可以定义自己的约束。自定义约束支持自定义结构体校验、自定义字段校验等。这里来介绍一下自定义结构体校验。自定义结构体校验当涉及到一些复杂的校验规则,这些已有的校验规则就不能满足我们的需求了。例如现在有一个需求,存在db的用户信息中创建时间与更新时间都要大于某一时间,假设是从前端传来的(当然不可能,哈哈)。现在我们来写一个简单示例,学习一下怎么对这个参数进行校验。package main
import (
"fmt"
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"github.com/go-playground/validator/v10"
)
type Info struct {
CreateTime time.Time `form:"create_time" binding:"required,timing" time_format:"2006-01-02"`
UpdateTime time.Time `form:"update_time" binding:"required,timing" time_format:"2006-01-02"`
}
// 自定义验证规则断言
func timing(fl validator.FieldLevel) bool {
if date, ok := fl.Field().Interface().(time.Time); ok {
today := time.Now()
if today.After(date) {
return false
}
}
return true
}
func main() {
route := gin.Default()
// 注册验证
if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
err := v.RegisterValidation("timing", timing)
if err != nil {
fmt.Println("success")
}
}
route.GET("/time", getTime)
route.Run(":8080")
}
func getTime(c *gin.Context) {
var b Info
// 数据模型绑定查询字符串验证
if err := c.ShouldBindWith(&b, binding.Query); err == nil {
c.JSON(http.StatusOK, gin.H{"message": "time are valid!"})
} else {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
}
写好了,下面我就来测试验证一下:$ curl "localhost:8080/time?create_time=2020-10-11&update_time=2020-10-11"
# 结果
{"message":"time are valid!"}%
$ curl "localhost:8080/time?create_time=1997-10-11&update_time=1997-10-11"
# 结果
{"error":"Key: 'Info.CreateTime' Error:Field validation for 'CreateTime' failed on the 'timing' tag\nKey: 'Info.UpdateTime' Error:Field validation for 'UpdateTime' failed on the 'timing' tag"}%
这里我们看到虽然参数验证成功了,但是这里返回的错误显示的也太全了,在项目开发中不可以给前端返回这么详细的信息的,所以我们需要改造一下:func getTime(c *gin.Context) {
var b Info
// 数据模型绑定查询字符串验证
if err := c.ShouldBindWith(&b, binding.Query); err == nil {
c.JSON(http.StatusOK, gin.H{"message": "time are valid!"})
} else {
_, ok := err.(validator.ValidationErrors)
if !ok {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"code": 1000, "msg": "param is error"})
}
}
这里在出现错误时返回固定错误即可。这里你也可以使用一个方法封装一下,对错误进行处理在进行返回,更多使用方法等你发觉哟。小彩蛋我们返回错误时都是英文的,当错误很长的时候,对于我这种英语渣渣,就要借助翻译软件了。所以要是能返回的错误直接是中文的就好了。validator库本身是支持国际化的,借助相应的语言包可以实现校验错误提示信息的自动翻译。下面就写一个代码演示一下啦。package main
import (
"fmt"
"log"
"net/http"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"github.com/go-playground/locales/en"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
enTranslations "github.com/go-playground/validator/v10/translations/en"
chTranslations "github.com/go-playground/validator/v10/translations/zh"
)
var trans ut.Translator
// loca 通常取决于 http 请求头的 'Accept-Language'
func transInit(local string) (err error) {
if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
zhT := zh.New() //chinese
enT := en.New() //english
uni := ut.New(enT, zhT, enT)
var o bool
trans, o = uni.GetTranslator(local)
if !o {
return fmt.Errorf("uni.GetTranslator(%s) failed", local)
}
//register translate
// 注册翻译器
switch local {
case "en":
err = enTranslations.RegisterDefaultTranslations(v, trans)
case "zh":
err = chTranslations.RegisterDefaultTranslations(v, trans)
default:
err = enTranslations.RegisterDefaultTranslations(v, trans)
}
return
}
return
}
type loginRequest struct {
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required,max=16,min=6"`
}
func main() {
if err := transInit("zh"); err != nil {
fmt.Printf("init trans failed, err:%v\n", err)
return
}
router := gin.Default()
router.POST("/user/login", login)
err := router.Run(":8888")
if err != nil {
log.Println("failed")
}
}
func login(c *gin.Context) {
var req loginRequest
if err := c.ShouldBindJSON(&req); err != nil {
// 获取validator.ValidationErrors类型的errors
errs, ok := err.(validator.ValidationErrors)
if !ok {
// 非validator.ValidationErrors类型错误直接返回
c.JSON(http.StatusOK, gin.H{
"msg": err.Error(),
})
return
}
// validator.ValidationErrors类型错误则进行翻译
c.JSON(http.StatusOK, gin.H{
"msg": errs.Translate(trans),
})
return
}
//login 操作省略
c.JSON(http.StatusOK, gin.H{
"code": 0,
"msg": "success",
})
}
我这里请求参数中限制密码的长度,来验证一下吧。curl --location --request POST 'http://localhost:8888/user/login' \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "asong",
"password": "11122222222222222222"
}'
# 返回
{
"msg": {
"loginRequest.Password": "Password长度不能超过16个字符"
}
}
看,直接显示中文了,是不是很棒,我们可以在测试的时候使用这个,上线项目不建议使用呦!!!总结好啦,这一篇文章到这里结束啦。这一篇干货还是满满的。学会这些知识点,提高我们的开发效率,省去了一些没必要写的代码。能用的轮子我们还是不要错过滴。我是asong,一名普普通通的程序猿,让我一起慢慢变强吧。欢迎各位的关注,我们下期见~~~推荐往期文章:听说你还不会jwt和swagger-饭我都不吃了带着实践项目我就来了 掌握这些Go语言特性,你的水平将提高N个档次(二) go实现多人聊天室,在这里你想聊什么都可以的啦!!! grpc实践-学会grpc就是这么简单 go标准库rpc实践 2020最新Gin框架中文文档 asong又捡起来了英语,用心翻译 基于gin的几种热加载方式 发布于 2020-08-22 19:14Go 语言gin(Go Web 框架)赞同 7添加评论分享喜欢收藏申请
validator - npm
skip to:contentpackage searchsign in❤npm's personal messengerProTeamsPricingDocumentationnpmSearchSign UpSign In validator13.11.0 • Public • Published 7 months ago ReadmeCode Beta0 Dependencies6,566 Dependents210 Versionsvalidator.js
A library of string validators and sanitizers.
Strings only
This library validates and sanitizes strings only.
If you're not sure if your input is a string, coerce it using input + ''.
Passing anything other than a string will result in an error.
Installation and Usage
Server-side usage
Install the library with npm install validator
No ES6
var validator = require('validator');
validator.isEmail('foo@bar.com'); //=> true
ES6
import validator from 'validator';
Or, import only a subset of the library:
import isEmail from 'validator/lib/isEmail';
Tree-shakeable ES imports
import isEmail from 'validator/es/lib/isEmail';
Client-side usage
The library can be loaded either as a standalone script, or through an AMD-compatible loader
validator.isEmail('foo@bar.com'); //=> true
The library can also be installed through bower
$ bower install validator-js
CDN
Contributors
Become a backer
Become a sponsor
Thank you to the people who have already contributed:
Validators
Here is a list of the validators currently available.
Validator
Description
contains(str, seed [, options])
check if the string contains the seed.options is an object that defaults to { ignoreCase: false, minOccurrences: 1 }.Options: ignoreCase: Ignore case when doing comparison, default false.minOccurences: Minimum number of occurrences for the seed in the string. Defaults to 1.
equals(str, comparison)
check if the string matches the comparison.
isAfter(str [, options])
check if the string is a date that is after the specified date.options is an object that defaults to { comparisonDate: Date().toString() }.Options:comparisonDate: Date to compare to. Defaults to Date().toString() (now).
isAlpha(str [, locale, options])
check if the string contains only letters (a-zA-Z).locale is one of ['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bg-BG', 'bn', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fa-IR', 'fi-FI', 'fr-CA', 'fr-FR', 'he', 'hi-IN', 'hu-HU', 'it-IT', 'kk-KZ', 'ko-KR', 'ja-JP', 'ku-IQ', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'si-LK', 'sl-SI', 'sk-SK', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'th-TH', 'tr-TR', 'uk-UA'] and defaults to en-US. Locale list is validator.isAlphaLocales. options is an optional object that can be supplied with the following key(s): ignore which can either be a String or RegExp of characters to be ignored e.g. " -" will ignore spaces and -'s.
isAlphanumeric(str [, locale, options])
check if the string contains only letters and numbers (a-zA-Z0-9).locale is one of ['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bn', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fa-IR', 'fi-FI', 'fr-CA', 'fr-FR', 'he', 'hi-IN', 'hu-HU', 'it-IT', 'kk-KZ', 'ko-KR', 'ja-JP','ku-IQ', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'si-LK', 'sl-SI', 'sk-SK', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'th-TH', 'tr-TR', 'uk-UA']) and defaults to en-US. Locale list is validator.isAlphanumericLocales. options is an optional object that can be supplied with the following key(s): ignore which can either be a String or RegExp of characters to be ignored e.g. " -" will ignore spaces and -'s.
isAscii(str)
check if the string contains ASCII chars only.
isBase32(str [, options])
check if the string is base32 encoded. options is optional and defaults to { crockford: false }. When crockford is true it tests the given base32 encoded string using Crockford's base32 alternative.
isBase58(str)
check if the string is base58 encoded.
isBase64(str [, options])
check if the string is base64 encoded. options is optional and defaults to { urlSafe: false } when urlSafe is true it tests the given base64 encoded string is url safe.
isBefore(str [, date])
check if the string is a date that is before the specified date.
isBIC(str)
check if the string is a BIC (Bank Identification Code) or SWIFT code.
isBoolean(str [, options])
check if the string is a boolean.options is an object which defaults to { loose: false }. If loose is is set to false, the validator will strictly match ['true', 'false', '0', '1']. If loose is set to true, the validator will also match 'yes', 'no', and will match a valid boolean string of any case. (e.g.: ['true', 'True', 'TRUE']).
isBtcAddress(str)
check if the string is a valid BTC address.
isByteLength(str [, options])
check if the string's length (in UTF-8 bytes) falls in a range.options is an object which defaults to { min: 0, max: undefined }.
isCreditCard(str [, options])
check if the string is a credit card number. options is an optional object that can be supplied with the following key(s): provider is an optional key whose value should be a string, and defines the company issuing the credit card. Valid values include ['amex', 'dinersclub', 'discover', 'jcb', 'mastercard', 'unionpay', 'visa'] or blank will check for any provider.
isCurrency(str [, options])
check if the string is a valid currency amount.options is an object which defaults to { symbol: '$', require_symbol: false, allow_space_after_symbol: false, symbol_after_digits: false, allow_negatives: true, parens_for_negatives: false, negative_sign_before_digits: false, negative_sign_after_digits: false, allow_negative_sign_placeholder: false, thousands_separator: ',', decimal_separator: '.', allow_decimal: true, require_decimal: false, digits_after_decimal: [2], allow_space_after_digits: false }.Note: The array digits_after_decimal is filled with the exact number of digits allowed not a range, for example a range 1 to 3 will be given as [1, 2, 3].
isDataURI(str)
check if the string is a data uri format.
isDate(str [, options])
check if the string is a valid date. e.g. [2002-07-15, new Date()]. options is an object which can contain the keys format, strictMode and/or delimiters.format is a string and defaults to YYYY/MM/DD.strictMode is a boolean and defaults to false. If strictMode is set to true, the validator will reject strings different from format. delimiters is an array of allowed date delimiters and defaults to ['/', '-'].
isDecimal(str [, options])
check if the string represents a decimal number, such as 0.1, .3, 1.1, 1.00003, 4.0, etc.options is an object which defaults to {force_decimal: false, decimal_digits: '1,', locale: 'en-US'}.locale determines the decimal separator and is one of ['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fa', 'fa-AF', 'fa-IR', 'fr-FR', 'fr-CA', 'hu-HU', 'id-ID', 'it-IT', 'ku-IQ', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pl-Pl', 'pt-BR', 'pt-PT', 'ru-RU', 'sl-SI', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'tr-TR', 'uk-UA', 'vi-VN'].Note: decimal_digits is given as a range like '1,3', a specific value like '3' or min like '1,'.
isDivisibleBy(str, number)
check if the string is a number that is divisible by another.
isEAN(str)
check if the string is an EAN (European Article Number).
isEmail(str [, options])
check if the string is an email.options is an object which defaults to { allow_display_name: false, require_display_name: false, allow_utf8_local_part: true, require_tld: true, allow_ip_domain: false, allow_underscores: false, domain_specific_validation: false, blacklisted_chars: '', host_blacklist: [] }. If allow_display_name is set to true, the validator will also match Display Name
isEmpty(str [, options])
check if the string has a length of zero.options is an object which defaults to { ignore_whitespace: false }.
isEthereumAddress(str)
check if the string is an Ethereum address. Does not validate address checksums.
isFloat(str [, options])
check if the string is a float.options is an object which can contain the keys min, max, gt, and/or lt to validate the float is within boundaries (e.g. { min: 7.22, max: 9.55 }) it also has locale as an option.min and max are equivalent to 'greater or equal' and 'less or equal', respectively while gt and lt are their strict counterparts.locale determines the decimal separator and is one of ['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fr-CA', 'fr-FR', 'hu-HU', 'it-IT', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'sl-SI', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'tr-TR', 'uk-UA']. Locale list is validator.isFloatLocales.
isFQDN(str [, options])
check if the string is a fully qualified domain name (e.g. domain.com).options is an object which defaults to { require_tld: true, allow_underscores: false, allow_trailing_dot: false, allow_numeric_tld: false, allow_wildcard: false, ignore_max_length: false }. If allow_wildcard is set to true, the validator will allow domain starting with *. (e.g. *.example.com or *.shop.example.com).
isFreightContainerID(str)
alias for isISO6346, check if the string is a valid ISO 6346 shipping container identification.
isFullWidth(str)
check if the string contains any full-width chars.
isHalfWidth(str)
check if the string contains any half-width chars.
isHash(str, algorithm)
check if the string is a hash of type algorithm.Algorithm is one of ['crc32', 'crc32b', 'md4', 'md5', 'ripemd128', 'ripemd160', 'sha1', 'sha256', 'sha384', 'sha512', 'tiger128', 'tiger160', 'tiger192'].
isHexadecimal(str)
check if the string is a hexadecimal number.
isHexColor(str)
check if the string is a hexadecimal color.
isHSL(str)
check if the string is an HSL (hue, saturation, lightness, optional alpha) color based on CSS Colors Level 4 specification.Comma-separated format supported. Space-separated format supported with the exception of a few edge cases (ex: hsl(200grad+.1%62%/1)).
isIBAN(str, [, options])
check if the string is an IBAN (International Bank Account Number).options is an object which accepts two attributes: whitelist: where you can restrict IBAN codes you want to receive data from and blacklist: where you can remove some of the countries from the current list. For both you can use an array with the following values ['AD','AE','AL','AT','AZ','BA','BE','BG','BH','BR','BY','CH','CR','CY','CZ','DE','DK','DO','EE','EG','ES','FI','FO','FR','GB','GE','GI','GL','GR','GT','HR','HU','IE','IL','IQ','IR','IS','IT','JO','KW','KZ','LB','LC','LI','LT','LU','LV','MC','MD','ME','MK','MR','MT','MU','MZ','NL','NO','PK','PL','PS','PT','QA','RO','RS','SA','SC','SE','SI','SK','SM','SV','TL','TN','TR','UA','VA','VG','XK'].
isIdentityCard(str [, locale])
check if the string is a valid identity card code.locale is one of ['LK', 'PL', 'ES', 'FI', 'IN', 'IT', 'IR', 'MZ', 'NO', 'TH', 'zh-TW', 'he-IL', 'ar-LY', 'ar-TN', 'zh-CN', 'zh-HK'] OR 'any'. If 'any' is used, function will check if any of the locales match.Defaults to 'any'.
isIMEI(str [, options]))
check if the string is a valid IMEI number. IMEI should be of format ############### or ##-######-######-#.options is an object which can contain the keys allow_hyphens. Defaults to first format. If allow_hyphens is set to true, the validator will validate the second format.
isIn(str, values)
check if the string is in an array of allowed values.
isInt(str [, options])
check if the string is an integer.options is an object which can contain the keys min and/or max to check the integer is within boundaries (e.g. { min: 10, max: 99 }). options can also contain the key allow_leading_zeroes, which when set to false will disallow integer values with leading zeroes (e.g. { allow_leading_zeroes: false }). Finally, options can contain the keys gt and/or lt which will enforce integers being greater than or less than, respectively, the value provided (e.g. {gt: 1, lt: 4} for a number between 1 and 4).
isIP(str [, version])
check if the string is an IP (version 4 or 6).
isIPRange(str [, version])
check if the string is an IP Range (version 4 or 6).
isISBN(str [, options])
check if the string is an ISBN.options is an object that has no default.Options:version: ISBN version to compare to. Accepted values are '10' and '13'. If none provided, both will be tested.
isISIN(str)
check if the string is an ISIN (stock/security identifier).
isISO6346(str)
check if the string is a valid ISO 6346 shipping container identification.
isISO6391(str)
check if the string is a valid ISO 639-1 language code.
isISO8601(str [, options])
check if the string is a valid ISO 8601 date. options is an object which defaults to { strict: false, strictSeparator: false }. If strict is true, date strings with invalid dates like 2009-02-29 will be invalid. If strictSeparator is true, date strings with date and time separated by anything other than a T will be invalid.
isISO31661Alpha2(str)
check if the string is a valid ISO 3166-1 alpha-2 officially assigned country code.
isISO31661Alpha3(str)
check if the string is a valid ISO 3166-1 alpha-3 officially assigned country code.
isISO4217(str)
check if the string is a valid ISO 4217 officially assigned currency code.
isISRC(str)
check if the string is an ISRC.
isISSN(str [, options])
check if the string is an ISSN.options is an object which defaults to { case_sensitive: false, require_hyphen: false }. If case_sensitive is true, ISSNs with a lowercase 'x' as the check digit are rejected.
isJSON(str [, options])
check if the string is valid JSON (note: uses JSON.parse).options is an object which defaults to { allow_primitives: false }. If allow_primitives is true, the primitives 'true', 'false' and 'null' are accepted as valid JSON values.
isJWT(str)
check if the string is valid JWT token.
isLatLong(str [, options])
check if the string is a valid latitude-longitude coordinate in the format lat,long or lat, long.options is an object that defaults to { checkDMS: false }. Pass checkDMS as true to validate DMS(degrees, minutes, and seconds) latitude-longitude format.
isLength(str [, options])
check if the string's length falls in a range.options is an object which defaults to { min: 0, max: undefined }. Note: this function takes into account surrogate pairs.
isLicensePlate(str, locale)
check if the string matches the format of a country's license plate.locale is one of ['cs-CZ', 'de-DE', 'de-LI', 'en-IN', 'es-AR', 'hu-HU', 'pt-BR', 'pt-PT', 'sq-AL', 'sv-SE'] or 'any'.
isLocale(str)
check if the string is a locale.
isLowercase(str)
check if the string is lowercase.
isLuhnNumber(str)
check if the string passes the Luhn algorithm check.
isMACAddress(str [, options])
check if the string is a MAC address.options is an object which defaults to { no_separators: false }. If no_separators is true, the validator will allow MAC addresses without separators. Also, it allows the use of hyphens, spaces or dots e.g. '01 02 03 04 05 ab', '01-02-03-04-05-ab' or '0102.0304.05ab'. The options also allow a eui property to specify if it needs to be validated against EUI-48 or EUI-64. The accepted values of eui are: 48, 64.
isMagnetURI(str)
check if the string is a Magnet URI format.
isMailtoURI(str, [, options])
check if the string is a Magnet URI format.options is an object of validating emails inside the URI (check isEmails options for details).
isMD5(str)
check if the string is a MD5 hash.Please note that you can also use the isHash(str, 'md5') function. Keep in mind that MD5 has some collision weaknesses compared to other algorithms (e.g., SHA).
isMimeType(str)
check if the string matches to a valid MIME type format.
isMobilePhone(str [, locale [, options]])
check if the string is a mobile phone number,locale is either an array of locales (e.g. ['sk-SK', 'sr-RS']) OR one of ['am-Am', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-EH', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-PS', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'az-AZ', 'az-LB', 'az-LY', 'be-BY', 'bg-BG', 'bn-BD', 'bs-BA', 'ca-AD', 'cs-CZ', 'da-DK', 'de-AT', 'de-CH', 'de-DE', 'de-LU', 'dv-MV', 'dz-BT', 'el-CY', 'el-GR', 'en-AG', 'en-AI', 'en-AU', 'en-BM', 'en-BS', 'en-BW', 'en-CA', 'en-GB', 'en-GG', 'en-GH', 'en-GY', 'en-HK', 'en-IE', 'en-IN', 'en-JM', 'en-KE', 'en-KI', 'en-KN', 'en-LS', 'en-MO', 'en-MT', 'en-MU', 'en-NG', 'en-NZ', 'en-PG', 'en-PH', 'en-PK', 'en-RW', 'en-SG', 'en-SL', 'en-SS', 'en-TZ', 'en-UG', 'en-US', 'en-ZA', 'en-ZM', 'en-ZW', 'es-AR', 'es-BO', 'es-CL', 'es-CO', 'es-CR', 'es-CU', 'es-DO', 'es-EC', 'es-ES', 'es-HN', 'es-MX', 'es-NI', 'es-PA', 'es-PE', 'es-PY', 'es-SV', 'es-UY', 'es-VE', 'et-EE', 'fa-AF', 'fa-IR', 'fi-FI', 'fj-FJ', 'fo-FO', 'fr-BE', 'fr-BF', 'fr-BJ', 'fr-CD', 'fr-CF', 'fr-FR', 'fr-GF', 'fr-GP', 'fr-MQ', 'fr-PF', 'fr-RE', 'fr-WF', 'ga-IE', 'he-IL', 'hu-HU', 'id-ID', 'ir-IR', 'it-IT', 'it-SM', 'ja-JP', 'ka-GE', 'kk-KZ', 'kl-GL', 'ko-KR', 'ky-KG', 'lt-LT', 'mg-MG', 'mn-MN', 'ms-MY', 'my-MM', 'mz-MZ', 'nb-NO', 'ne-NP', 'nl-AW', 'nl-BE', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-AO', 'pt-BR', 'pt-PT', 'ro-Md', 'ro-RO', 'ru-RU', 'si-LK', 'sk-SK', 'sl-SI', 'so-SO', 'sq-AL', 'sr-RS', 'sv-SE', 'tg-TJ', 'th-TH', 'tk-TM', 'tr-TR', 'uk-UA', 'uz-UZ', 'vi-VN', 'zh-CN', 'zh-HK', 'zh-MO', 'zh-TW'] OR defaults to 'any'. If 'any' or a falsey value is used, function will check if any of the locales match).options is an optional object that can be supplied with the following keys: strictMode, if this is set to true, the mobile phone number must be supplied with the country code and therefore must start with +. Locale list is validator.isMobilePhoneLocales.
isMongoId(str)
check if the string is a valid hex-encoded representation of a MongoDB ObjectId.
isMultibyte(str)
check if the string contains one or more multibyte chars.
isNumeric(str [, options])
check if the string contains only numbers.options is an object which defaults to { no_symbols: false } it also has locale as an option. If no_symbols is true, the validator will reject numeric strings that feature a symbol (e.g. +, -, or .).locale determines the decimal separator and is one of ['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fr-FR', 'fr-CA', 'hu-HU', 'it-IT', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'sl-SI', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'tr-TR', 'uk-UA'].
isOctal(str)
check if the string is a valid octal number.
isPassportNumber(str, countryCode)
check if the string is a valid passport number.countryCode is one of ['AM', 'AR', 'AT', 'AU', 'AZ', 'BE', 'BG', 'BY', 'BR', 'CA', 'CH', 'CN', 'CY', 'CZ', 'DE', 'DK', 'DZ', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IN', 'IR', 'ID', 'IS', 'IT', 'JM', 'JP', 'KR', 'KZ', 'LI', 'LT', 'LU', 'LV', 'LY', 'MT', 'MX', 'MY', 'MZ', 'NL', 'NZ', 'PH', 'PK', 'PL', 'PT', 'RO', 'RU', 'SE', 'SL', 'SK', 'TH', 'TR', 'UA', 'US'].
isPort(str)
check if the string is a valid port number.
isPostalCode(str, locale)
check if the string is a postal code.locale is one of ['AD', 'AT', 'AU', 'AZ', 'BA', 'BE', 'BG', 'BR', 'BY', 'CA', 'CH', 'CN', 'CZ', 'DE', 'DK', 'DO', 'DZ', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IN', 'IR', 'IS', 'IT', 'JP', 'KE', 'KR', 'LI', 'LK', 'LT', 'LU', 'LV', 'MG', 'MT', 'MX', 'MY', 'NL', 'NO', 'NP', 'NZ', 'PL', 'PR', 'PT', 'RO', 'RU', 'SA', 'SE', 'SG', 'SI', 'SK', 'TH', 'TN', 'TW', 'UA', 'US', 'ZA', 'ZM'] OR 'any'. If 'any' is used, function will check if any of the locales match. Locale list is validator.isPostalCodeLocales.
isRFC3339(str)
check if the string is a valid RFC 3339 date.
isRgbColor(str [, includePercentValues])
check if the string is a rgb or rgba color.includePercentValues defaults to true. If you don't want to allow to set rgb or rgba values with percents, like rgb(5%,5%,5%), or rgba(90%,90%,90%,.3), then set it to false.
isSemVer(str)
check if the string is a Semantic Versioning Specification (SemVer).
isSurrogatePair(str)
check if the string contains any surrogate pairs chars.
isUppercase(str)
check if the string is uppercase.
isSlug(str)
check if the string is of type slug.
isStrongPassword(str [, options])
check if the string can be considered a strong password or not. Allows for custom requirements or scoring rules. If returnScore is true, then the function returns an integer score for the password rather than a boolean.Default options: { minLength: 8, minLowercase: 1, minUppercase: 1, minNumbers: 1, minSymbols: 1, returnScore: false, pointsPerUnique: 1, pointsPerRepeat: 0.5, pointsForContainingLower: 10, pointsForContainingUpper: 10, pointsForContainingNumber: 10, pointsForContainingSymbol: 10 }
isTime(str [, options])
check if the string is a valid time e.g. [23:01:59, new Date().toLocaleTimeString()]. options is an object which can contain the keys hourFormat or mode.hourFormat is a key and defaults to 'hour24'.mode is a key and defaults to 'default'. hourFomat can contain the values 'hour12' or 'hour24', 'hour24' will validate hours in 24 format and 'hour12' will validate hours in 12 format. mode can contain the values 'default' or 'withSeconds', 'default' will validate HH:MM format, 'withSeconds' will validate the HH:MM:SS format.
isTaxID(str, locale)
check if the string is a valid Tax Identification Number. Default locale is en-US.More info about exact TIN support can be found in src/lib/isTaxID.js.Supported locales: [ 'bg-BG', 'cs-CZ', 'de-AT', 'de-DE', 'dk-DK', 'el-CY', 'el-GR', 'en-CA', 'en-GB', 'en-IE', 'en-US', 'es-ES', 'et-EE', 'fi-FI', 'fr-BE', 'fr-CA', 'fr-FR', 'fr-LU', 'hr-HR', 'hu-HU', 'it-IT', 'lb-LU', 'lt-LT', 'lv-LV', 'mt-MT', 'nl-BE', 'nl-NL', 'pl-PL', 'pt-BR', 'pt-PT', 'ro-RO', 'sk-SK', 'sl-SI', 'sv-SE' ].
isURL(str [, options])
check if the string is a URL.options is an object which defaults to { protocols: ['http','https','ftp'], require_tld: true, require_protocol: false, require_host: true, require_port: false, require_valid_protocol: true, allow_underscores: false, host_whitelist: false, host_blacklist: false, allow_trailing_dot: false, allow_protocol_relative_urls: false, allow_fragments: true, allow_query_components: true, disallow_auth: false, validate_length: true }.require_protocol - if set to true isURL will return false if protocol is not present in the URL.require_valid_protocol - isURL will check if the URL's protocol is present in the protocols option.protocols - valid protocols can be modified with this option.require_host - if set to false isURL will not check if host is present in the URL.require_port - if set to true isURL will check if port is present in the URL.allow_protocol_relative_urls - if set to true protocol relative URLs will be allowed.allow_fragments - if set to false isURL will return false if fragments are present.allow_query_components - if set to false isURL will return false if query components are present.validate_length - if set to false isURL will skip string length validation (2083 characters is IE max URL length).
isUUID(str [, version])
check if the string is a UUID (version 1, 2, 3, 4 or 5).
isVariableWidth(str)
check if the string contains a mixture of full and half-width chars.
isVAT(str, countryCode)
check if the string is a valid VAT number if validation is available for the given country code matching ISO 3166-1 alpha-2. countryCode is one of ['AL', 'AR', 'AT', 'AU', 'BE', 'BG', 'BO', 'BR', 'BY', 'CA', 'CH', 'CL', 'CO', 'CR', 'CY', 'CZ', 'DE', 'DK', 'DO', 'EC', 'EE', 'EL', 'ES', 'FI', 'FR', 'GB', 'GT', 'HN', 'HR', 'HU', 'ID', 'IE', 'IL', 'IN', 'IS', 'IT', 'KZ', 'LT', 'LU', 'LV', 'MK', 'MT', 'MX', 'NG', 'NI', 'NL', 'NO', 'NZ', 'PA', 'PE', 'PH', 'PL', 'PT', 'PY', 'RO', 'RS', 'RU', 'SA', 'SE', 'SI', 'SK', 'SM', 'SV', 'TR', 'UA', 'UY', 'UZ', 'VE'].
isWhitelisted(str, chars)
check if the string consists only of characters that appear in the whitelist chars.
matches(str, pattern [, modifiers])
check if the string matches the pattern.Either matches('foo', /foo/i) or matches('foo', 'foo', 'i').
Sanitizers
Here is a list of the sanitizers currently available.
Sanitizer
Description
blacklist(input, chars)
remove characters that appear in the blacklist. The characters are used in a RegExp and so you will need to escape some chars, e.g. blacklist(input, '\\[\\]').
escape(input)
replace <, >, &, ', " and / with HTML entities.
ltrim(input [, chars])
trim characters from the left-side of the input.
normalizeEmail(email [, options])
canonicalize an email address. (This doesn't validate that the input is an email, if you want to validate the email use isEmail beforehand).options is an object with the following keys and default values:
all_lowercase: true - Transforms the local part (before the @ symbol) of all email addresses to lowercase. Please note that this may violate RFC 5321, which gives providers the possibility to treat the local part of email addresses in a case sensitive way (although in practice most - yet not all - providers don't). The domain part of the email address is always lowercased, as it is case insensitive per RFC 1035.
gmail_lowercase: true - Gmail addresses are known to be case-insensitive, so this switch allows lowercasing them even when all_lowercase is set to false. Please note that when all_lowercase is true, Gmail addresses are lowercased regardless of the value of this setting.
gmail_remove_dots: true: Removes dots from the local part of the email address, as Gmail ignores them (e.g. "john.doe" and "johndoe" are considered equal).
gmail_remove_subaddress: true: Normalizes addresses by removing "sub-addresses", which is the part following a "+" sign (e.g. "foo+bar@gmail.com" becomes "foo@gmail.com").
gmail_convert_googlemaildotcom: true: Converts addresses with domain @googlemail.com to @gmail.com, as they're equivalent.
outlookdotcom_lowercase: true - Outlook.com addresses (including Windows Live and Hotmail) are known to be case-insensitive, so this switch allows lowercasing them even when all_lowercase is set to false. Please note that when all_lowercase is true, Outlook.com addresses are lowercased regardless of the value of this setting.
outlookdotcom_remove_subaddress: true: Normalizes addresses by removing "sub-addresses", which is the part following a "+" sign (e.g. "foo+bar@outlook.com" becomes "foo@outlook.com").
yahoo_lowercase: true - Yahoo Mail addresses are known to be case-insensitive, so this switch allows lowercasing them even when all_lowercase is set to false. Please note that when all_lowercase is true, Yahoo Mail addresses are lowercased regardless of the value of this setting.
yahoo_remove_subaddress: true: Normalizes addresses by removing "sub-addresses", which is the part following a "-" sign (e.g. "foo-bar@yahoo.com" becomes "foo@yahoo.com").
icloud_lowercase: true - iCloud addresses (including MobileMe) are known to be case-insensitive, so this switch allows lowercasing them even when all_lowercase is set to false. Please note that when all_lowercase is true, iCloud addresses are lowercased regardless of the value of this setting.
icloud_remove_subaddress: true: Normalizes addresses by removing "sub-addresses", which is the part following a "+" sign (e.g. "foo+bar@icloud.com" becomes "foo@icloud.com").
rtrim(input [, chars])
trim characters from the right-side of the input.
stripLow(input [, keep_new_lines])
remove characters with a numerical value < 32 and 127, mostly control characters. If keep_new_lines is true, newline characters are preserved (\n and \r, hex 0xA and 0xD). Unicode-safe in JavaScript.
toBoolean(input [, strict])
convert the input string to a boolean. Everything except for '0', 'false' and '' returns true. In strict mode only '1' and 'true' return true.
toDate(input)
convert the input string to a date, or null if the input is not a date.
toFloat(input)
convert the input string to a float, or NaN if the input is not a float.
toInt(input [, radix])
convert the input string to an integer, or NaN if the input is not an integer.
trim(input [, chars])
trim characters (whitespace by default) from both sides of the input.
unescape(input)
replace HTML encoded entities with <, >, &, ', " and /.
whitelist(input, chars)
remove characters that do not appear in the whitelist. The characters are used in a RegExp and so you will need to escape some chars, e.g. whitelist(input, '\\[\\]').
XSS Sanitization
XSS sanitization was removed from the library in 2d5d6999.
For an alternative, have a look at Yahoo's xss-filters library or at DOMPurify.
Contributing
In general, we follow the "fork-and-pull" Git workflow.
Fork the repo on GitHub
Clone the project to your own machine
Work on your fork
Make your changes and additions
Most of your changes should be focused on src/ and test/ folders and/or README.md.
Files such as validator.js, validator.min.js and files in lib/ folder are autogenerated when running tests (npm test) and need not to be changed manually.
Change or add tests if needed
Run tests and make sure they pass
Add changes to README.md if needed
Commit changes to your own branch
Make sure you merge the latest from "upstream" and resolve conflicts if there is any
Repeat step 3(3) above
Push your work back up to your fork
Submit a Pull request so that we can review your changes
Tests
Tests are using mocha, to run the tests use:
$ npm test
Maintainers
chriso - Chris O'Hara (author)
profnandaa - Anthony Nandaa
ezkemboi - Ezrqn Kemboi
tux-tn - Sarhan Aissi
Reading
Remember, validating can be troublesome sometimes. See A list of articles about programming assumptions commonly made that aren't true.
License (MIT)
Copyright (c) 2018 Chris O'Hara
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
ReadmeKeywordsvalidatorvalidationvalidatesanitizationsanitizesanitisationsanitiseassertPackage SidebarInstallnpm i validatorRepositoryGitgithub.com/validatorjs/validator.jsHomepagegithub.com/validatorjs/validator.jsDownloadsWeekly Downloads10,868,120Version13.11.0LicenseMITUnpacked Size751 kBTotal Files221Last publish7 months agoCollaboratorsTry on RunKitReport malware FooterSupportHelpAdvisoriesStatusContact npmCompanyAboutBlogPressTerms & PoliciesPoliciesTerms of UseCode of ConductPrivacy
Validator.js by ppoffice
Validator.js
A Laravel styled JavaScript Object/Form/JSON validation library.
View on GitHub
Download .zip
Download .tar.gz
validator.js
Laravel风格的JavaScript对象/表单/JSON验证库。| English Version | Laravel Validation
支持不同验证规则组合
支持复杂对象的递归验证
支持添加自定义验证器
举个例子
var example = {
text: 'Hello world!',
date: '2015-07-07',
attachment: {
name: 'note1',
count: 1,
},
comments: null,
},
rules = {
text: 'required|string',
date: 'date|date_format:yyyy-MM-dd',
attachment: {
name: 'required|string',
content: 'integer',
},
comments: 'array',
};
console.log(Validator.validate(example, rules));
// => {status: 'failed', [{object: [Object], field: "comments", rule: "array"}]}
基本用法
引入validator.js(原生JavaScript)
或
初始化(非原生JavaScript)
Node.js
npm install js-validator --save
var validator = require('js-validator');
RequireJS
requirejs(["../src/validator"], function(validator) {
...
});
Sea.js
define(function (require, exports, module) {
var validator = require('./validator');
...
});
制定验证规则
对于同一个对象属性,你可以并列制定几个不同的规则进行限定,使用|作为不同规则间的分割符。
var rules = {
text: 'required|string',
date: 'date|date_format:yyyy-MM-dd',
comments: 'integer',
};
关于转义
当验证规则中必须出现'|', ':' 或者 ','时,请对在它们之前添加'\\',如:
var person = {
nickname: 'Harry|Poter'
},
rules = {
nickname: 'in:Harry\\|Potter,Hermione\\:Granger,Ron\\,Weasley'
}
验证
// Validator.validate if you are using native JavaScript code
validator.validate(object_to_be_tested, rules);
验证结果
返回一个包含status和rejects属性的对象。
如果所有验证规则都满足,则status为'success',rejects为空数组;否则status为'failed',rejects为验证失败规则的详细信息。
添加验证器
使用add方法为Validator添加验证器,第一个参数为验证器名称,第二个参数为验证方法,可以为正则表达式对象或者函数。当验证方法为函数时,其第一个参数为待验证的对象,第二个参数为当前验证域的值,后面的参数根据需求而定,验证成功时结果返回true。
// Validator.add if you are using native JavaScript code
validator.add('older_than', function (object, value, age) {
return value > age;
});
var rules = {
age: 'integer|older_than:17',
};
配置
// Validator.setConfig if you are using native JavaScript code
validator.setConfig({...});
可用配置
resumeOnFailed
默认值 false
当某条验证失败时是否继续其他规则的验证。为true时继续验证。
可用的验证规则
accepted
验证域必须为yes、on、1、或者true。 这个规则常用语验证“同意使用条款”表单。
after:date
验证的日期域的日期必须在指定日期之后。
alpha
验证域必须由纯英文字符组成。
alpha_dash
验证域必须由英文字符、数字、中划线或者下划线组成。
alpha_num
验证域必须由英文字符或者数字组成。
array
验证域必须为数组对象。
before:date
验证的日期域的日期必须在给定日期之前。
between:min,max
验证域的值必须在min和max之间,验证域可以是字符串、数字或者文件对象(FileList/File)。文件大小单位为KB。
boolean
验证域的值可以看作是布尔值,可以是true,false,1,0,"1","0",'1' and '0'。
date
验证域必须为日期字符串形式,可以被Date.parse方法解析。
date_format:format
验证域必须符合制定的日期格式,允许的日期格式参照源代码中的dateFormat方法。
different:field
验证域的值必须域指定域的值不同。
digits:value
验证域必须为数字,且其位数为给定的位数。
digits_between:min,max
验证域必须为数字,且其位数在min和max之间。
验证域必须为电子邮件地址格式。
in:foo,bar,...
验证域的值必须在给定的允许值列表中。
integer
验证值必须为整数。
ip
验证值必须为IP地址形式(支持IPv4与IPv6)。
max:value
验证域的值必须小于等于max,验证域可以是字符串、数字或者文件对象(FileList/File)。文件大小单位为KB。
mimes:foo,bar,...
验证值的扩展名必须在给定的扩展名列表中。
min:value
验证域的值必须大于等于min,验证域可以是字符串、数字或者文件对象(FileList/File)。文件大小单位为KB。
not_in:foo,bar,...
验证域的值必须不在给定的值列表中。
numeric
验证域必须为数字。
regex
验证域必须符合指定的正则表达式(JavaScript风格)。
required
验证域必须存在。
required_if:field,value,...
如果给定的域的值等于给定的值,验证域必须存在。这里的条件可以是多个域和值,它们之间的关系为“与”。
required_with:foo,bar,...
如果给定的域之中任何一个存在的话,验证域必须存在。
required_with_all:foo,bar,...
仅当所有给定的域存在时,验证域必须存在。
required_without:foo,bar,...
如果给定的域之中任何一个不存在的话,验证域必须存在。
required_without_all:foo,bar,...
仅当所有给定的所有域都不存在时,验证域必须存在。
same
验证域的值必须域指定域的值相同。
size:value
验证域的大小必须等于指定大小。对于字符串来说,验证域的字符串长度必须等于给定长度。对于数字来说,验证域的值必须等于给定值。对于文件(FileList/File)来说,文件的大小必须等于给定值(单位为KB)。
string
验证域必须为字符串。
url
验证域必须为URL地址。当前不支持含有非英文(中文等)字符的地址。
测试文件入口
./test/index.html 原生JavaScript支持测试
./test/node.js Node.js支持测试
./test/requirejs.html RequireJS支持测试
./test/seajs.html Sea.js支持测试
Validator.js is maintained by ppoffice.
This page was generated by GitHub Pages using the Cayman theme by Jason Long.
进阶用法 - python-validator
Skip to content
python-validator
进阶用法
Initializing search
GitHub
python-validator
GitHub
首页
进阶用法
进阶用法
Table of contents
定义 Validator
校验数据
错误信息
自定义字段级的校验方法
自定义全局的校验方法
生成测试数据
to_dict
数据结构字典
特殊字段
通过数据结构字典创建 Validator
国际化
字段
字段
字段 API
自定义字段
异常
关于
关于
历史版本
LICENSE
Table of contents
定义 Validator
校验数据
错误信息
自定义字段级的校验方法
自定义全局的校验方法
生成测试数据
to_dict
数据结构字典
特殊字段
通过数据结构字典创建 Validator
进阶
python-validator 主要包含 Validator 和 XXXField 两部分,Validator 类似于 Django 中的 Model,用于描述数据结构,其中的 XXXField 描述了字段的类型和约束并负责校验对应的数据。
定义 Validator
直接继承 Validator 类并列出包含的字段
from validator import Validator, StringField, IntegerField, EnumField
class UserInfoValidator(Validator):
name = StringField(max_length=50, required=True)
age = IntegerField(min_value=1, max_value=120, default=20)
sex = EnumField(choices=['f', 'm'])
上面的代码定义了一个校验用户信息的 Validator:
name 是一个字符串,最大长度为 50 个字节,并且必须提供不能缺失。注意这里的长度指的是字节,而不是字符。
age 是一个整形,最小值 1,最大值 120,非必须,默认值 20
sex 是一个枚举类型,可选值:['f', 'm'],非必须。
当 required 为 True 时,该字段必须提供,除非显式指定 default 值。如果 required 为 True 且没有指定 default 值,当字段不存在时将会发生异常 FieldValidationError。以上面的 UserInfoValidator 为例,下面的数据将会发生异常:
data = {
# 缺少 name 字段
'age': 20,
'sex': 'f'
}
python-validator 还支持 通过数据结构字典创建 Validator。
关于字段参数请参考 字段 API。
校验数据
使用 is_valid() 校验数据,数据合法该方法返回 True,否则返回 False。
data = {
'name:'Bob',
'age': 30,
'sex': 'm'
}
v = UserInfoValidator(data)
print(v.is_valid()) # 校验数据
print(v.validated_data) # 获取校验过的数据
如果数据不合法,那么 v.validated_data 是 None。
is_valid() 其实还接受一个可选的参数 raise_error,该参数默认为 False,
如果 raise_error 为 True,那么当数据非法时,is_valid() 会触发异常 ValidationError,而不是返回 False。
错误信息
错误信息保存在实例属性 errors 中,errors 是一个字典,包含了每个错误字段的错误信息,例如:
# data
{
'age': '24',
'sex': 'f'
}
# v.errors
{
'age':
'name':
}
str_errors 属性是格式化之后的错误信息,例如:
{
'age': 'got a wrong type: str, expect integer',
'name': 'Field is required'
}
自定义字段级的校验方法
Validator 在校验数据时会自动调用形如 validate_xxx 的方法校验字段数据。
validate_xxx 方法接受一个参数 value(已经校验过的值),无需返回任何值。如果数据非法,触发 FieldValidationError 异常即可。
将 xxx 替换为字段名
代码示例:
from validator import Validator, StringField, IntegerField, EnumField, FieldValidationError
class UserInfoValidator(Validator):
name = StringField(max_length=50, required=True)
age = IntegerField(min_value=1, max_value=120, default=20)
sex = EnumField(choices=['f', 'm'])
def validate_name(self, value):
if value == 'foo':
raise FieldValidationError('"foo" is invalid')
注意:不建议在 validate_xxx 方法中修改 value
自定义全局的校验方法
当校验完所有字段的数据后,Validator 会调用 validate 方法校验全局数据,此时的全局数据是一个已经校验过的 dict。默认的 validate 方法直接返回数据,你可以覆盖它以实现自己的校验逻辑。
代码示例:
from validator import Validator, StringField, IntegerField, EnumField, ValidationError
class UserInfoValidator(Validator):
name = StringField(max_length=50, required=True)
age = IntegerField(min_value=1, max_value=120, default=20)
sex = EnumField(choices=['f', 'm'])
def validate(self, data):
if data['name'] == 'Bob' and data['age'] > 60:
raise ValidationError('Bob is too old, he is younger than 60 age')
# 你也可以在这里修改 data 的数据
# data['foo'] = 'bar'
return data
生成测试数据
类方法 mock_data() 方法可以生成测试数据,该数据不保证完全通过校验,特别是通过 “自定义字段级的校验方法” 和 “自定义全局的校验方法” 的校验。
代码示例:
data = UserInfoValidator.mock_data()
print(data) # {'age': 74, 'name': u'R7fuZaWOCPUVeYSQqaUvI', 'sex': 'f'}
to_dict
类方法 to_dict(cls) 返回一个描述数据结构的 dict,例如:
{
"age": {
"required": false,
"default": 20,
"max_value": 120,
"min_value": 1,
"strict": true,
"validators": [],
"type": "integer"
},
"name": {
"regex": null,
"min_length": 0,
"max_length": 50,
"strict": true,
"default": "__empty__",
"validators": [],
"required": true,
"type": "string"
},
"sex": {
"default": "__empty__",
"required": false,
"choices": [
"f",
"m"
],
"strict": true,
"validators": [],
"type": "enum"
}
}
数据结构字典
数据结构字典的 key 是字段名称,value 是描述字段的类型和初始化参数的字典。
以上面 to_dict 返回的字典为例,age, name,和 sex 都是字段名称,其对应的值包含了字段类型和初始化参数。
type 表示字符串形式的字段类型,每个字段的字符串形式的字段类型保存在 FIELD_TYPE_NAME 属性中。剩余的参数都是字段的初始化参数。
假如 default 等于 EMPTY_VALUE,为了方便则使用 '__empty__' 表示。
特殊字段
ListField
ListField 是复合数据,需要通过 field 参数指明列表项的类型,field 参数同样适用字典来表示。例如:
class V(Validator):
cards = ListField(min_length=1, max_length=52,
field=IntegerField(min_value=1, max_value=13))
print(json.dumps(V.to_dict(), indent=4))
# json output
{
"cards": {
"min_length": 1,
"strict": true,
"default": "__empty__",
"required": false,
"field": {
"required": false,
"default": "__empty__",
"max_value": 13,
"min_value": 1,
"strict": true,
"validators": [],
"type": "integer"
},
"max_length": 52,
"validators": [],
"type": "list"
}
}
DictField
DictField 是复合数据,需要通过 validator 参数校验字典内部的各个字段。validator 就是 Validator 的实例,因此可以通过字典来描述 validator,就像一个 validator 嵌套了另外一个 validator。例如:
data = {
'rectangle': {
'type': 'dict',
'validator': {
'width': {
'type': 'integer',
'default': '__empty__'
},
'height': {
'type': 'integer',
}
},
}
}
V = create_validator(data)
print(json.dumps(V.to_dict(), indent=4))
# output
{
"rectangle": {
"default": "__empty__",
"required": false,
"strict": true,
"validator": {
"width": {
"required": false,
"default": "__empty__",
"max_value": null,
"min_value": null,
"strict": true,
"validators": [],
"type": "integer"
},
"height": {
"required": false,
"default": "__empty__",
"max_value": null,
"min_value": null,
"strict": true,
"validators": [],
"type": "integer"
}
},
"validators": [],
"type": "dict"
}
}
通过数据结构字典创建 Validator
create_validator(data_struct_dict, name=None)
根据 data_struct_dict 创建一个 Validator 实例。data_struct_dict 是一个描述数据结构的字典,类似于 to_dict 返回的字典。
示例:
data = {
'name': {
'type': 'string',
'min_length': 10,
'max_length': 20,
}
}
V = create_validator(data)
Previous
首页
Next
国际化
Made with
Material for MkDocs