mirror of
https://github.com/Fishwaldo/validator.git
synced 2025-07-08 14:10:18 +00:00
add file and README example
This commit is contained in:
parent
89a5909004
commit
c4203fff25
3 changed files with 186 additions and 6 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -24,4 +24,5 @@ _testmain.go
|
|||
*.prof
|
||||
*.test
|
||||
*.out
|
||||
cover.html
|
||||
cover.html
|
||||
README.html
|
104
README.md
104
README.md
|
@ -5,10 +5,15 @@ Package validator
|
|||
[](https://godoc.org/gopkg.in/bluesuncorp/validator.v5)
|
||||
|
||||
Package validator implements value validations for structs and individual fields based on tags.
|
||||
It is also capable of Cross Field and Cross Struct validations.
|
||||
|
||||
It has the following **unique** features:
|
||||
|
||||
- Cross Field and Cross Struct validations.
|
||||
- Slice, Array and Map diving, which allows any or all levels of a multidimensional field to be validated.
|
||||
- Handles type interface by determining it's underlying type prior to validation.
|
||||
|
||||
Installation
|
||||
============
|
||||
------------
|
||||
|
||||
Use go get.
|
||||
|
||||
|
@ -23,12 +28,101 @@ Then import the validator package into your own code.
|
|||
import "gopkg.in/bluesuncorp/validator.v5"
|
||||
|
||||
Usage and documentation
|
||||
=======================
|
||||
------
|
||||
|
||||
Please see http://godoc.org/gopkg.in/bluesuncorp/validator.v5 for detailed usage docs.
|
||||
|
||||
##### Example:
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"gopkg.in/bluesuncorp/validator.v5"
|
||||
)
|
||||
|
||||
// User contains user information
|
||||
type User struct {
|
||||
FirstName string `validate:"required"`
|
||||
LastName string `validate:"required"`
|
||||
Age uint8 `validate:"gte=0,lte=130"`
|
||||
Email string `validate:"required,email"`
|
||||
FavouriteColor string `validate:"hexcolor|rgb|rgba"`
|
||||
Addresses []*Address `validate:"required,dive,required"` // a person can have a home and cottage...
|
||||
}
|
||||
|
||||
// Address houses a users address information
|
||||
type Address struct {
|
||||
Street string `validate:"required"`
|
||||
City string `validate:"required"`
|
||||
Planet string `validate:"required"`
|
||||
Phone string `validate:"required"`
|
||||
}
|
||||
|
||||
var validate *validator.Validate
|
||||
|
||||
func main() {
|
||||
|
||||
validate = validator.New("validate", validator.BakedInValidators)
|
||||
|
||||
address := &Address{
|
||||
Street: "Eavesdown Docks",
|
||||
Planet: "Persphone",
|
||||
Phone: "none",
|
||||
}
|
||||
|
||||
user := &User{
|
||||
FirstName: "Badger",
|
||||
LastName: "Smith",
|
||||
Age: 135,
|
||||
Email: "Badger.Smith@gmail.com",
|
||||
FavouriteColor: "#000",
|
||||
Addresses: []*Address{address},
|
||||
}
|
||||
|
||||
// returns nil or *StructErrors
|
||||
errs := validate.Struct(user)
|
||||
|
||||
if errs != nil {
|
||||
|
||||
// err will be of type *FieldError
|
||||
err := errs.Errors["Age"]
|
||||
fmt.Println(err.Error()) // output: Field validation for "Age" failed on the "lte" tag
|
||||
fmt.Println(err.Field) // output: Age
|
||||
fmt.Println(err.Tag) // output: lte
|
||||
fmt.Println(err.Kind) // output: uint8
|
||||
fmt.Println(err.Type) // output: uint8
|
||||
fmt.Println(err.Param) // output: 130
|
||||
fmt.Println(err.Value) // output: 135
|
||||
|
||||
// or if you prefer you can use the Flatten function
|
||||
// NOTE: I find this usefull when using a more hard static approach of checking field errors.
|
||||
// The above, is best for passing to some generic code to say parse the errors. i.e. I pass errs
|
||||
// to a routine which loops through the errors, creates and translates the error message into the
|
||||
// users locale and returns a map of map[string]string // field and error which I then use
|
||||
// within the HTML rendering.
|
||||
|
||||
flat := errs.Flatten()
|
||||
fmt.Println(flat) // output: map[Age:Field validation for "Age" failed on the "lte" tag Addresses[0].Address.City:Field validation for "City" failed on the "required" tag]
|
||||
err = flat["Addresses[0].Address.City"]
|
||||
fmt.Println(err.Field) // output: City
|
||||
fmt.Println(err.Tag) // output: required
|
||||
fmt.Println(err.Kind) // output: string
|
||||
fmt.Println(err.Type) // output: string
|
||||
fmt.Println(err.Param) // output:
|
||||
fmt.Println(err.Value) // output:
|
||||
|
||||
// from here you can create your own error messages in whatever language you wish
|
||||
return
|
||||
}
|
||||
|
||||
// save user to database
|
||||
}
|
||||
```
|
||||
|
||||
How to Contribute
|
||||
=================
|
||||
------
|
||||
|
||||
There will always be a development branch for each version i.e. `v1-development`. In order to contribute,
|
||||
please make your pull requests against those branches.
|
||||
|
@ -41,5 +135,5 @@ I strongly encourage everyone whom creates a custom validation function to contr
|
|||
help make this package even better.
|
||||
|
||||
License
|
||||
=======
|
||||
------
|
||||
Distributed under MIT License, please see license file in code for more details.
|
||||
|
|
85
examples/simple.go
Normal file
85
examples/simple.go
Normal file
|
@ -0,0 +1,85 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"gopkg.in/bluesuncorp/validator.v5"
|
||||
)
|
||||
|
||||
// User contains user information
|
||||
type User struct {
|
||||
FirstName string `validate:"required"`
|
||||
LastName string `validate:"required"`
|
||||
Age uint8 `validate:"gte=0,lte=130"`
|
||||
Email string `validate:"required,email"`
|
||||
FavouriteColor string `validate:"hexcolor|rgb|rgba"`
|
||||
Addresses []*Address `validate:"required,dive,required"` // a person can have a home and cottage...
|
||||
}
|
||||
|
||||
// Address houses a users address information
|
||||
type Address struct {
|
||||
Street string `validate:"required"`
|
||||
City string `validate:"required"`
|
||||
Planet string `validate:"required"`
|
||||
Phone string `validate:"required"`
|
||||
}
|
||||
|
||||
var validate *validator.Validate
|
||||
|
||||
func main() {
|
||||
|
||||
validate = validator.New("validate", validator.BakedInValidators)
|
||||
|
||||
address := &Address{
|
||||
Street: "Eavesdown Docks",
|
||||
Planet: "Persphone",
|
||||
Phone: "none",
|
||||
}
|
||||
|
||||
user := &User{
|
||||
FirstName: "Badger",
|
||||
LastName: "Smith",
|
||||
Age: 135,
|
||||
Email: "Badger.Smith@gmail.com",
|
||||
FavouriteColor: "#000",
|
||||
Addresses: []*Address{address},
|
||||
}
|
||||
|
||||
// returns nil or *StructErrors
|
||||
errs := validate.Struct(user)
|
||||
|
||||
if errs != nil {
|
||||
|
||||
// err will be of type *FieldError
|
||||
err := errs.Errors["Age"]
|
||||
fmt.Println(err.Error()) // output: Field validation for "Age" failed on the "lte" tag
|
||||
fmt.Println(err.Field) // output: Age
|
||||
fmt.Println(err.Tag) // output: lte
|
||||
fmt.Println(err.Kind) // output: uint8
|
||||
fmt.Println(err.Type) // output: uint8
|
||||
fmt.Println(err.Param) // output: 130
|
||||
fmt.Println(err.Value) // output: 135
|
||||
|
||||
// or if you prefer you can use the Flatten function
|
||||
// NOTE: I find this usefull when using a more hard static approach of checking field errors.
|
||||
// The above, is best for passing to some generic code to say parse the errors. i.e. I pass errs
|
||||
// to a routine which loops through the errors, creates and translates the error message into the
|
||||
// users locale and returns a map of map[string]string // field and error which I then use
|
||||
// within the HTML rendering.
|
||||
|
||||
flat := errs.Flatten()
|
||||
fmt.Println(flat) // output: map[Age:Field validation for "Age" failed on the "lte" tag Addresses[0].Address.City:Field validation for "City" failed on the "required" tag]
|
||||
err = flat["Addresses[0].Address.City"]
|
||||
fmt.Println(err.Field) // output: City
|
||||
fmt.Println(err.Tag) // output: required
|
||||
fmt.Println(err.Kind) // output: string
|
||||
fmt.Println(err.Type) // output: string
|
||||
fmt.Println(err.Param) // output:
|
||||
fmt.Println(err.Value) // output:
|
||||
|
||||
// from here you can create your own error messages in whatever language you wish
|
||||
return
|
||||
}
|
||||
|
||||
// save user to database
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue