https://github.com/go-passwd/validator
Flexible and customizable password validation
https://github.com/go-passwd/validator
go go-library go-package golang golang-library golang-package password-validation password-validator
Last synced: 5 months ago
JSON representation
Flexible and customizable password validation
- Host: GitHub
- URL: https://github.com/go-passwd/validator
- Owner: go-passwd
- License: mit
- Created: 2018-08-08T20:46:30.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2025-04-07T04:48:38.000Z (about 1 year ago)
- Last Synced: 2025-08-03T00:08:08.412Z (11 months ago)
- Topics: go, go-library, go-package, golang, golang-library, golang-package, password-validation, password-validator
- Language: Go
- Homepage: https://go-passwd.github.io/validator.html
- Size: 506 KB
- Stars: 15
- Watchers: 1
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Password validator library for Go
[](https://github.com/go-passwd/validator/tags)
[](https://pkg.go.dev/github.com/go-passwd/validator)
[](https://github.com/go-passwd/validator/actions/workflows/test.yml)
[](https://goreportcard.com/report/github.com/go-passwd/validator)
[](./LICENSE)
## Installation
~~~sh
go get -u github.com/go-passwd/validator
~~~
## Usage
~~~go
import "github.com/go-passwd/validator"
passwordValidator := validator.New(validator.MinLength(5, nil), validator.MaxLength(10, nil))
err := passwordValidator.Validate(form.Password)
if err != nil {
panic(err)
}
~~~
You can pass to every validator functions ``customError`` parameter witch will be returned on error instead of default error.
~~~go
import "github.com/go-passwd/validator"
passwordValidator := validator.New(validator.MinLength(5, errors.New("too short")), validator.MaxLength(10, errors.New("too long")))
err := passwordValidator.Validate(form.Password)
if err != nil {
panic(err)
}
~~~
## Validators
### CommonPassword
Check if password is a common password.
Common password list is based on list created by Mark Burnett: https://xato.net/passwords/more-top-worst-passwords/
~~~go
passwordValidator := validator.New(validator.CommonPassword(nil))
~~~
### ContainsAtLeast
Count occurrences of a chars and compares it with required value.
~~~go
passwordValidator := validator.New(validator.ContainsAtLeast(5, "abcdefghijklmnopqrstuvwxyz", nil))
~~~
### ContainsOnly
Check if password contains only selected chars.
~~~go
passwordValidator := validator.New(validator.ContainsOnly("abcdefghijklmnopqrstuvwxyz", nil))
~~~
### MaxLength
Check if password length is not greater that defined length.
~~~go
passwordValidator := validator.New(validator.MaxLength(10, nil))
~~~
### MinLength
Check if password length is not lower that defined length.
~~~go
passwordValidator := validator.New(validator.MinLength(5, nil))
~~~
### Noop
Always return custom error.
~~~go
passwordValidator := validator.New(validator.Noop(nil))
~~~
### Regex
Check if password match regexp pattern.
~~~go
passwordValidator := validator.New(validator.Regex("^\\w+$", nil))
~~~
### Similarity
Check if password is sufficiently different from the attributes.
Attributes can be: user login, email, first name, last name, …
~~~go
passwordValidator := validator.New(validator.Similarity([]string{"username", "username@example.com"}, nil, nil))
~~~
### StartsWith
Check if password starts with one of letter.
~~~go
passwordValidator := validator.New(validator.StartsWith("abcdefghijklmnopqrstuvwxyz", nil))
~~~
### Unique
Check if password contains only unique chars.
~~~go
passwordValidator := validator.New(validator.Unique(nil))
~~~