github.com/zhongdalu/gf@v1.0.0/g/util/gvalid/gvalid.go (about)

     1  // Copyright 2017-2018 gf Author(https://github.com/zhongdalu/gf). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/zhongdalu/gf.
     6  
     7  // Package gvalid implements powerful and useful data/form validation functionality.
     8  //
     9  // 数据/表单校验.
    10  package gvalid
    11  
    12  import (
    13  	"github.com/zhongdalu/gf/g/text/gregex"
    14  	"strings"
    15  )
    16  
    17  /*
    18  参考:https://laravel.com/docs/5.5/validation#available-validation-rules
    19  规则如下:
    20  required             格式:required                              说明:必需参数
    21  required-if          格式:required-if:field,value,...           说明:必需参数(当任意所给定字段值与所给值相等时,即:当field字段的值为value时,当前验证字段为必须参数)
    22  required-unless      格式:required-unless:field,value,...       说明:必需参数(当所给定字段值与所给值都不相等时,即:当field字段的值不为value时,当前验证字段为必须参数)
    23  required-with        格式:required-with:field1,field2,...       说明:必需参数(当所给定任意字段值不为空时)
    24  required-with-all    格式:required-with-all:field1,field2,...   说明:必须参数(当所给定所有字段值都不为空时)
    25  required-without     格式:required-without:field1,field2,...    说明:必需参数(当所给定任意字段值为空时)
    26  required-without-all 格式:required-without-all:field1,field2,...说明:必须参数(当所给定所有字段值都为空时)
    27  date                 格式:date                                  说明:参数为常用日期类型,格式:2006-01-02, 20060102, 2006.01.02
    28  date-format          格式:date-format:format                    说明:判断日期是否为指定的日期格式,format为Go日期格式(可以包含时间)
    29  email                格式:email                                 说明:EMAIL邮箱地址
    30  phone                格式:phone                                 说明:手机号
    31  telephone            格式:telephone                             说明:国内座机电话号码,"XXXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"、"XXXXXXXX"
    32  passport             格式:passport                              说明:通用帐号规则(字母开头,只能包含字母、数字和下划线,长度在6~18之间)
    33  password             格式:password                              说明:通用密码(任意可见字符,长度在6~18之间)
    34  password2            格式:password2                             说明:中等强度密码(在弱密码的基础上,必须包含大小写字母和数字)
    35  password3            格式:password3                             说明:强等强度密码(在弱密码的基础上,必须包含大小写字母、数字和特殊字符)
    36  postcode             格式:postcode                              说明:中国邮政编码
    37  id-number            格式:id-number                             说明:公民身份证号码
    38  qq                   格式:qq                                    说明:腾讯QQ号码
    39  ip                   格式:ip                                    说明:IPv4/IPv6地址
    40  ipv4                 格式:ipv4                                  说明:IPv4地址
    41  ipv6                 格式:ipv6                                  说明:IPv6地址
    42  mac                  格式:mac                                   说明:MAC地址
    43  url                  格式:url                                   说明:URL
    44  domain               格式:domain                                说明:域名
    45  length               格式:length:min,max                        说明:参数长度为min到max(长度参数为整形),注意中文一个汉字占3字节
    46  min-length           格式:min-length:min                        说明:参数长度最小为min(长度参数为整形),注意中文一个汉字占3字节
    47  max-length           格式:max-length:max                        说明:参数长度最大为max(长度参数为整形),注意中文一个汉字占3字节
    48  between              格式:between:min,max                       说明:参数大小为min到max(支持整形和浮点类型参数)
    49  min                  格式:min:min                               说明:参数最小为min(支持整形和浮点类型参数)
    50  max                  格式:max:max                               说明:参数最大为max(支持整形和浮点类型参数)
    51  json                 格式:json                                  说明:判断数据格式为JSON
    52  integer              格式:integer                               说明:整数
    53  float                格式:float                                 说明:浮点数(整数也是浮点数)
    54  boolean              格式:boolean                               说明:布尔值(1,true,on,yes:true | 0,false,off,no,"":false)
    55  same                 格式:same:field                            说明:参数值必需与field参数的值相同
    56  different            格式:different:field                       说明:参数值不能与field参数的值相同
    57  in                   格式:in:value1,value2,...                  说明:参数值应该在value1,value2,...中(字符串匹配)
    58  not-in               格式:not-in:value1,value2,...              说明:参数值不应该在value1,value2,...中(字符串匹配)
    59  regex                格式:regex:pattern                         说明:参数值应当满足正则匹配规则pattern
    60  */
    61  
    62  // 自定义错误信息: map[键名] => 字符串|map[规则]错误信息
    63  type CustomMsg = map[string]interface{}
    64  
    65  // 解析单条sequence tag,格式: [数值键名/别名@]校验规则[#错误提示],
    66  // 其中校验规则如果有多个那么以"|"符号分隔,错误提示同理。
    67  func parseSequenceTag(tag string) (name, rule, msg string) {
    68  	match, _ := gregex.MatchString(`\s*((\w+)\s*@){0,1}\s*([^#]+)\s*(#\s*(.*)){0,1}\s*`, tag)
    69  	return strings.TrimSpace(match[2]), strings.TrimSpace(match[3]), strings.TrimSpace(match[5])
    70  }