The ultimate way to validate your data. All you need is add some info on tags with some simple description!
`go get github.com/sadnoodles/tagvalidate`
package main
import (
"fmt"
"github.com/sadnoodles/tagvalidate"
)
type Common struct {
Id int64 `zero:"true" max:"20" min:"7" neq:"11"` // Add tags here
Uuid string `empty:"true" type:"uuid"` // Add tags here
}
func main() {
c := new(Common)
c.Id = 4 //Validate error. @Field:Id tag:min wanted:7, Got: 4
c.Uuid = "ssasd" //Validate error. @Field:Uuid tag:type wanted:uuid, Got: "ssasd"
err := tagvalidate.Check(c) // Check a instance of Common struct
if err != nil {
fmt.Println(err)
}
}Syntax: {option name}:"{option value}" [{option name2}:"{option value2}"...]
| Option | Value | Meaning |
|---|---|---|
| empty | false/true | Allow this field empty or not |
| eq | any string (s) | Strictly equal to s |
| neq | any string | Strictly not equal to s |
| starts | any string | Starts with s |
| ends | any string | Ends with s |
| contains | any string | Contains s |
| ncontains | any string | Note contains s |
| upper | false/true | |
| lower | false/true | |
| len | int | Must be this long |
| max_len | int | Max length |
| min_len | int | Min length |
| regx | reg exp | re check |
| type | See type table | Frequency types |
| func | Func name | Custom functions under your struct |
| func (string) bool |
Type is a quick access to some frequency data type, most of then is validated by regx. Use type tag like this:
type LoginLog struct{
User string `empty:"false" type:"email"`
IP string `type:"ipv4"`
}For type, allow those values. To add extra value (if this type allowed extra value) use , after type name like: type:"date,2006-01-02":
| Type name | meaning | examples | Extra value |
|---|---|---|---|
| int | 1, +123, -3, 0 | - | |
| float | - | ||
| hex | - | ||
| ipv4 | ipv4 only | - | |
| ip | ipv4 or ipv6 | - | |
| - | |||
| url | - | ||
| hexcolor | color use hex | - | |
| fullpath | windows or unix full path | - | |
| uuid3 | - | ||
| uuid4 | - | ||
| uuid5 | - | ||
| uuid | - | ||
| num | number | - | |
| alpha | alpha table | - | |
| md5 | MD5 checksum (length 32) | - | |
| md5(16) | MD5 checksum (length 16) | - | |
| base64 | base64 encoded string | - | |
| date | date format | date formating string | |
| json | json dumped string | ||
| *domain | domain of a web site | ||
| *map | |||
| *list |
* Those are not done yet.
To check if data is a LAN IP:
InnerIP string `type:"ip" regx:"^(127|192|172|10[\\D])"`NOTE: dot(".") in tag will cause tag parse error. Also you should use two \\ to escape slash.
| Option | Value | Meaning |
|---|---|---|
| zero | false/true | Allow zero or not |
| eq | any int (i) | Strictly equal to i |
| neq | any int | Strictly not equal to i |
| max | int | Max value |
| min | int | Min value |
| func | Func name | Custom functions under your struct |
| func (int64) bool |
- Float field.
- Struct field.
- Map field.
- Array field.
- Child struct check.
- Set to default value when empty.