Git Product home page Git Product logo

check's Introduction

check - Go package for data validation

Build Status GoDoc

Design goals

  • Composite pattern
  • Multiple constraints on the same value by applying multiple validators
  • Easy to create custom validators
  • Easy to customize error messages

Usage

go get github.com/pengux/check

To run tests:

cd $GOPATH/src/github.com/pengux/check && go test

To validate your data, create a new Struct and add validators to it:

type User struct {
	Username string
}

func main() {
	u := &User{
		Username: "invalid*",
	}

	s := check.Struct{
		"Username": check.Composite{
			check.NonEmpty{},
			check.Regex{`^[a-zA-Z0-9]+$`},
			check.MinChar{10},
		},
	}

	e := s.Validate(u)

	if e.HasErrors() {
		err, ok := e.GetErrorsByKey("Username")
		if !ok {
			panic("key 'Username' does not exists")
		}
		fmt.Println(err)
	}
}

To use your own custom validator, just implement the Validator interface:

type CustomStringContainValidator struct {
	Constraint string
}

func (validator CustomStringContainValidator) Validate(v interface{}) check.Error {
	if !strings.Contains(v.(string), validator.Constraint) {
		return check.NewValidationError("customStringContainValidator", v, validator.Constraint)
	}

	return nil
}

func main() {
	username := "invalid*"
	validator := CustomStringContainValidator{"admin"}
	e := validator.Validate(username)
	fmt.Println(check.ErrorMessages[e.Error()])
}

To use custom error messages, either overwrite the package variable ErrorMessages or create your own map[string]string:

check.ErrorMessages["minChar"] := "the string must be minimum %v characters long"
errMessages := errs.ToMessages()
fmt.Println(errMessages)

For more example code check the file e2e_test.go.

check's People

Contributors

m4rw3r avatar pengux avatar hami9x avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.