Input validation with field-level errors.
// Direct validation (returns error)
err := validation.ValidateEmail(email)
err := validation.ValidatePassword(password)
err := validation.ValidateUsername(username)
errs := validation.ValidateAll(
validation.Field("email", email).Required().Email(),
validation.Field("password", password).Required().Password(),
validation.Field("password_confirm", confirmation).Required().Equal(password),
)
// Field validators (return ValidationError for forms)
ve := validation.ValidateEmailField("email", value)
ve := validation.ValidatePhoneField("phone", value)
ve := validation.NoHTML("bio", value)
if !ve.IsEmpty() {
errors[ve.Field] = ve.Message
}
// Normalization
email := validation.NormalizeEmail(input) // lowercase, trimmedPassword rules: 8-128 chars, requires uppercase, lowercase, digit, special char.