gf/g/util/gvalid/gvalid.go

71 lines
6.1 KiB
Go
Raw Normal View History

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