1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package valid
- import "regexp"
- // ErrMatchInvalid is the error that returns in case of invalid format.
- var ErrMatchInvalid = NewError("validation_match_invalid", "must be in a valid format")
- // Match returns a validation rule that checks if a value matches the specified regular expression.
- // This rule should only be used for validating strings and byte slices, or a validation error will be reported.
- // An empty value is considered valid. Use the Required rule to make sure a value is not empty.
- func Match(re *regexp.Regexp) MatchRule {
- return MatchRule{
- re: re,
- err: ErrMatchInvalid,
- }
- }
- // MatchRule is a validation rule that checks if a value matches the specified regular expression.
- type MatchRule struct {
- re *regexp.Regexp
- err Error
- }
- // Validate checks if the given value is valid or not.
- func (r MatchRule) Validate(value interface{}) error {
- value, isNil := Indirect(value)
- if isNil {
- return nil
- }
- isString, str, isBytes, bs := StringOrBytes(value)
- if isString && (str == "" || r.re.MatchString(str)) {
- return nil
- } else if isBytes && (len(bs) == 0 || r.re.Match(bs)) {
- return nil
- }
- return r.err
- }
- // Error sets the error message for the rule.
- func (r MatchRule) Error(message string) MatchRule {
- r.err = r.err.SetMessage(message)
- return r
- }
- // ErrorObject sets the error struct for the rule.
- func (r MatchRule) ErrorObject(err Error) MatchRule {
- r.err = err
- return r
- }
|