I need to add special characters (@#$%^&.?) to the oneof or use regexp, but regexp errors on execution is undefined. I am currently using, oneof=uppercase&lowercase&numeric. this validator would be checking if the passwords contain at least 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character.
Sample Code ==>
package main
import (
"fmt"
"github.com/go-playground/validator/v10"
)
type UserReg struct {
Username string `validate:"required,min=4,max=15"`
Email string `validate:"required,email"`
Password string `validate:"required,min=8,max=20,eqfield=ConfirmPassword,oneof=uppercase&lowercase&numeric"`
ConfirmPassword string `validate:"required,min=8,max=20,oneof=uppercase&lowercase&numeric"`
}
type UserReg2 struct {
Username string `validate:"required,min=4,max=15"`
Email string `validate:"required,email"`
Password string `validate:"required,min=8,max=20,eqfield=ConfirmPassword,regexp=^(?=.*[a-zA-Z0-9!@#$%^&.?/]).$"`
ConfirmPassword string `validate:"required,min=8,max=20,regexp=^(?=.*[a-zA-Z0-9!@#$%^&.?/]).$"`
}
func main() {
fmt.Println("Start of working test w/o check for special characters")
ut := UserReg{
Username: "Joe23",
Email: "[email protected]",
Password: "Pa55w0rd",
ConfirmPassword: "Pa55w0rd",
}
validate := validator.New()
err := validate.Struct(ut)
fmt.Println(err)
fmt.Println("End of working test w/o check for special characters")
fmt.Println("Start of failing test w/ check for special characters")
ut2 := UserReg2{
Username: "Joe23",
Email: "[email protected]",
Password: "Pa$$w0rd",
ConfirmPassword: "Pa$$w0rd",
}
err2 := validate.Struct(ut2)
fmt.Println(err2)
fmt.Println("End of failing test w/ check for special characters")
}