Hero Circle Shape
Hero Moon Shape
Hero Right Shape
tokenpockettokenpocket安卓版免费下载|validator

tokenpockettokenpocket安卓版免费下载|validator

  • 作者: tokenpockettokenpocket安卓版免费下载
  • 2024-03-07 21:46:56

The W3C Markup Validation Service

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的使用_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文件引入

javax.validation

validation-api

1.1.0.Final

org.hibernate

hibernate-validator

5.2.4.Final

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 Map validate(T t, Class... groups){

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 validateList(Collection collection){

//基础校验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 validateObject(Object first,Object... objects){

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=BeanValidator.validateObject(param);

//如果错误集合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中添加以下依赖即可:

javax.validation

validation-api

...

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">

javax.validation

validation-api

1.1.0.Final

org.hibernate

hibernate-validator

5.2.0.Final

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[] 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().nonAbsent("用户不存在");

}

return new RspDTO().success(user);

} @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的输入相关资料

所需依赖

org.springframework.boot

spring-boot-starter-web

注解

正则解释

参数校验

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 上加@Valid注解

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

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 | 菜鸟教程

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、将校验规则写到控件中

    

输入您的名字,邮箱,URL,备注。

尝试一下 »

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,将调用默认的信息

验证完整的表单

主题 (至少选择两个) - 注意:如果没有勾选“我乐意接收新信息”以下选项会隐藏,但我们这里作为演示让它可见

Marketflash

Latest fuzz

Mailing list digester

尝试一下 »

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 元素包裹它

Login Form

尝试一下 »

代码的作用是:一般情况下把错误信息显示在 中,如果是 radio 则显示在 中,如果是 checkbox 则显示在内容的后面。

参数

类型

描述

默认值

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!") }

})

name="email" class="{validate:{ required:true,email:true }}" />

value="Submit" />

实例下载

完整代码: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库,看这一篇就够用了 - 知乎切换模式写文章登录/注册学会使用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

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

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 . If require_display_name is set to true, the validator will reject strings without the format Display Name . If allow_utf8_local_part is set to false, the validator will not allow any non-English UTF8 character in email address' local part. If require_tld is set to false, email addresses without a TLD in their domain will also be matched. If ignore_max_length is set to true, the validator will not check for the standard max length of an email. If allow_ip_domain is set to true, the validator will allow IP addresses in the host part. If domain_specific_validation is true, some additional validation will be enabled, e.g. disallowing certain syntactically valid email addresses that are rejected by Gmail. If blacklisted_chars receives a string, then the validator will reject emails that include any of the characters in the string, in the name part. If host_blacklist is set to an array of strings and the part of the email after the @ symbol matches one of the strings defined in it, the validation fails. If host_whitelist is set to an array of strings and the part of the email after the @ symbol matches none of the strings defined in it, the validation fails.

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 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之间。

email

验证域必须为电子邮件地址格式。

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

进阶用法 - 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