package main
import (
"fmt"
"github.com/ochipin/validate"
)
func main() {
// 検証したい値を Validator 関数に渡す
v := validate.Validator("No number")
// 数字ではない場合、"Not Number" エラーメッセージを出力する
v.Number().Message("Not Number")
// エラーが発生している場合は、Println でエラーメッセージ("Not Number") を出力する
if v.HasErrors() {
fmt.Println(v)
}
}
package main
import (
"fmt"
"github.com/ochipin/validate"
)
func main() {
// 検証したい複数のデータを Validators 関数に渡す(構造体も可)
v, err := validate.Validators(map[string]interface{}{
"username": "User Name",
"age": 99,
"start": "2019-02-01",
})
if err != nil {
panic(err)
}
// username は空文字列ではないことを検証
v.Require("username") // .Message("...") 関数を使用しない場合、デフォルトのエラーメッセージとなる
// "username" は、 User Name 文字列か検証する
v.Match("username", `^User Name$`)
// age には数字が格納されているか検証する
v.Number("age")
// 18-100 歳までOK
v.Max("age", 80).Message("80歳までです")
v.Min("age", 18)
// 日付か否かを検証する
v.Date("start")
// エラーが発生している場合は表示する
if v.HasErrors() {
// ココのエラーでは、"age"のみがエラー出力される
fmt.Println(v.ErrList()[0])
}
}
- Number
- Max
- Min
- MaxLen
- MinLen
- URL
- Match
- EMail
- Require
- Date
に詳細記載済み。
バリデート構造体をカスタムし、独自のバリデーション関数を追加する
package main
import (
"fmt"
"github.com/ochipin/validate"
)
// Validate : カスタム用バリデーション構造体
type Validate struct {
*validate.Validate
}
// Equal : 文字列マッチ用関数を追加
func (validate *Validate) Equal(equal string) validate.Result {
// 文字列が一致していない場合、エラーとして扱う
if fmt.Sprint(validate.Value) != equal {
validate.Result().Message("Not match")
}
return validate.Result()
}
// Validates : 複数のバリデーションを行うカスタムバリデーション構造体
type Validates struct {
*validate.Validates
}
// Equal : 文字列マッチ用関数を追加
func (validates *Validates) Equal(keyname, equal string) validate.Result {
if v, ok := validates.Values[keyname]; ok {
result := Validator(v).Equal(equal)
if result.Error() != "" {
validates.Errors[keyname] = result
}
return result
}
// 指定したキーが見つからない場合
result := &validate.ValidResult{}
result.Message(fmt.Sprintf("%s: not found", keyname))
validates.Errors[keyname] = result
return result
}
// Validator : 単一のバリデーションチェックに使用する
func Validator(value interface{}) *Validate {
return &Validate{
Validate: validate.Validator(value),
}
}
// Validators : 複数のバリデーションチェックに使用する
func Validators(i interface{}) (*Validates, error) {
v, err := validate.Validators(i)
if err != nil {
return nil, err
}
return &Validates{
Validates: v,
}, nil
}
func main() {
v := Validator("User Name")
v.Equal("User Name").Message("NO MATCH USER NAME")
if v.HasErrors() {
fmt.Println(v)
}
}