Skip to Content
Go Realm v1 is released 🎉
Go DTO Validator/v10Part 2: Validation Reference

Part 2: Complete Validation Reference

This section provides comprehensive reference tables for all available validation rules in validator/v10.


String Validation Rules {#ref-strings}

Format Validations

RuleDescriptionExampleValid Values
emailValid email addressvalidate:"email"user@example.com
urlValid URL (must have scheme)validate:"url"https://example.com
uriValid URI (can be relative)validate:"uri"/api/users
alphaLetters only (A-Z, a-z)validate:"alpha"JohnDoe
alphanumLetters and numbersvalidate:"alphanum"user123
alphaunicodeLetters with unicodevalidate:"alphaunicode"José
asciiASCII characters onlyvalidate:"ascii"Hello123
lowercaseAll lowercasevalidate:"lowercase"hello
uppercaseAll uppercasevalidate:"uppercase"HELLO
hexcolorHex color codevalidate:"hexcolor"#FF5733, #F00
uuidUUID (any version)validate:"uuid"550e8400-e29b-41d4-a716-446655440000
uuid3UUID version 3validate:"uuid3"UUID v3 format
uuid4UUID version 4validate:"uuid4"UUID v4 format
uuid5UUID version 5validate:"uuid5"UUID v5 format
ulidULID formatvalidate:"ulid"01ARZ3NDEKTSV4RRFFQ69G5FAV
ipIP address (v4 or v6)validate:"ip"192.168.1.1, 2001:db8::8a2e:370:7334
ipv4IPv4 addressvalidate:"ipv4"192.168.1.1
ipv6IPv6 addressvalidate:"ipv6"2001:db8::8a2e:370:7334
macMAC addressvalidate:"mac"01:23:45:67:89:ab
jsonValid JSON stringvalidate:"json"{"key":"value"}
base64Base64 encodedvalidate:"base64"SGVsbG8=
jwtJWT tokenvalidate:"jwt"eyJhbGc...
e164E.164 phone formatvalidate:"e164"+12345678901
isbnISBN-10 or ISBN-13validate:"isbn"978-3-16-148410-0
isbn10ISBN-10validate:"isbn10"0-306-40615-2
isbn13ISBN-13validate:"isbn13"978-0-306-40615-7

Length Validations

RuleDescriptionExampleNotes
minMinimum lengthvalidate:"min=5"Min 5 characters
maxMaximum lengthvalidate:"max=20"Max 20 characters
lenExact lengthvalidate:"len=10"Exactly 10 characters
eqEqual to valuevalidate:"eq=admin"Must be “admin”
neNot equal to valuevalidate:"ne=banned"Cannot be “banned”

Pattern Matching

RuleDescriptionExampleNotes
containsContains substringvalidate:"contains=Go"Must contain “Go”
excludesDoesn’t contain substringvalidate:"excludes=<script>"Cannot contain "
startswithStarts with stringvalidate:"startswith=blog-"Must start with “blog-”
endswithEnds with stringvalidate:"endswith=.jpg"Must end with “.jpg”
regexMatches regex patternvalidate:"regex=^[a-z]+$"Custom regex pattern

Number Validation Rules {#ref-numbers}

Comparison Validations

RuleDescriptionExampleNotes
eqEqual tovalidate:"eq=5"Must equal 5
neNot equal tovalidate:"ne=0"Cannot be 0
gtGreater thanvalidate:"gt=0"Must be > 0
gteGreater than or equalvalidate:"gte=18"Must be >= 18
ltLess thanvalidate:"lt=100"Must be < 100
lteLess than or equalvalidate:"lte=120"Must be <= 120
minMinimum valuevalidate:"min=1"Min value 1
maxMaximum valuevalidate:"max=100"Max value 100

Numeric Type Validations

RuleDescriptionExampleNotes
numericNumeric value (as string)validate:"numeric"”123”, “123.45”
numberIs a numbervalidate:"number"Integer or float
integerInteger valuevalidate:"integer"Whole numbers only
decimalDecimal numbervalidate:"decimal"Has decimal point

Special Number Validations

RuleDescriptionExampleNotes
multipleOfMultiple of valuevalidate:"multipleOf=5"5, 10, 15, 20…
oneofOne of specific valuesvalidate:"oneof=1 2 3 4 5"Enum for numbers

Array/Slice Validation Rules {#ref-arrays}

RuleDescriptionExampleNotes
minMinimum array lengthvalidate:"min=1"At least 1 element
maxMaximum array lengthvalidate:"max=5"At most 5 elements
lenExact array lengthvalidate:"len=3"Exactly 3 elements
uniqueAll elements uniquevalidate:"unique"No duplicates
diveValidate each elementvalidate:"dive,email"Each element must be valid email
dive,keys,diveValidate map keysvalidate:"dive,keys,dive,email"For map validations

Date/Time Validation Rules {#ref-dates}

RuleDescriptionExampleNotes
datetimeDate in specific formatvalidate:"datetime=2006-01-02"Go time format
timezoneValid timezoneCustom ruleAmerica/New_York

Date Comparison (Cross-Field)

RuleDescriptionExampleNotes
gtefieldGreater than or equal to fieldvalidate:"gtefield=StartDate"EndDate >= StartDate
gtfieldGreater than fieldvalidate:"gtfield=StartDate"EndDate > StartDate
ltefieldLess than or equal to fieldvalidate:"ltefield=EndDate"StartDate <= EndDate
ltfieldLess than fieldvalidate:"ltfield=EndDate"StartDate < EndDate

Boolean Validation Rules {#ref-booleans}

RuleDescriptionExampleNotes
booleanIs a booleanvalidate:"boolean"true or false
eqMust equal valuevalidate:"eq=true"Must be true
neMust not equal valuevalidate:"ne=true"Must be false

File Validation Rules {#ref-files}

RuleDescriptionExampleNotes
fileValid file pathvalidate:"file"File exists
filepathValid file path formatvalidate:"filepath"Path format only
dirpathValid directory pathvalidate:"dirpath"Directory format
endswithFile extension checkvalidate:"endswith=.jpg"Check extension

Database Validation Rules {#ref-database}

RuleDescriptionExampleNotes
iso3166_1_alpha2ISO 3166-1 alpha-2 country codevalidate:"iso3166_1_alpha2"US, CA, GB, etc.
iso3166_1_alpha3ISO 3166-1 alpha-3 country codevalidate:"iso3166_1_alpha3"USA, CAN, GBR, etc.
iso4217ISO 4217 currency codevalidate:"iso4217"USD, EUR, GBP, etc.

Utility Validation Rules {#ref-utilities}

Required/Optional Rules

RuleDescriptionExampleNotes
requiredField must have valuevalidate:"required"Cannot be empty/zero
required_ifRequired if conditionvalidate:"required_if=Field value"Conditional required
required_unlessRequired unless conditionvalidate:"required_unless=Field value"Inverse conditional
required_withRequired with another fieldvalidate:"required_with=Field"Both or neither
required_with_allRequired with all fieldsvalidate:"required_with_all=F1 F2"All or none
required_withoutRequired without anothervalidate:"required_without=Field"One must exist
required_without_allRequired without allvalidate:"required_without_all=F1 F2"At least one required
omitemptySkip validation if emptyvalidate:"omitempty,email"Validate only if present
omitnilSkip validation if nilvalidate:"omitnil"For pointers

Exclusion Rules

RuleDescriptionExampleNotes
excluded_ifExcluded if conditionvalidate:"excluded_if=Type business"Must be empty when condition met
excluded_unlessExcluded unless conditionvalidate:"excluded_unless=Active true"Must be empty unless condition
excluded_withExcluded with another fieldvalidate:"excluded_with=Field"Cannot coexist
excluded_withoutExcluded without anothervalidate:"excluded_without=Field"Requires other field

Cross-Field Comparisons

RuleDescriptionExampleNotes
eqfieldEqual to another fieldvalidate:"eqfield=Password"Field matching
nefieldNot equal to another fieldvalidate:"nefield=OldEmail"Must be different
gtfieldGreater than another fieldvalidate:"gtfield=MinPrice"Range validation
gtefieldGreater than or equal fieldvalidate:"gtefield=MinAge"Range validation
ltfieldLess than another fieldvalidate:"ltfield=MaxPrice"Range validation
ltefieldLess than or equal fieldvalidate:"ltefield=MaxAge"Range validation
eqcsfieldEqual (cross-struct)validate:"eqcsfield=Struct.Field"Cross-struct comparison
necsfieldNot equal (cross-struct)validate:"necsfield=Struct.Field"Cross-struct comparison

Special Rules

RuleDescriptionExampleNotes
oneofOne of enumerated valuesvalidate:"oneof=red blue green"Enum validation
-Skip fieldvalidate:"-"Ignore this field

Common Validation Patterns

Password Validation

Password string `validate:"required,min=8,max=72"` // Or with custom strong password rule Password string `validate:"required,strong_password"`

Email & Username

Email string `validate:"required,email"` Username string `validate:"required,min=3,max=20,alphanum"`

URL & Slug

Website string `validate:"omitempty,url"` Slug string `validate:"required,lowercase,alphanum"`

Phone & Address

Phone string `validate:"required,e164"` ZIPCode string `validate:"required,len=5,numeric"` Country string `validate:"required,iso3166_1_alpha2"` // US, CA, UK

Numbers & Ranges

Age int `validate:"required,gte=18,lte=120"` Price float64 `validate:"required,gt=0"` Quantity int `validate:"required,min=1,multipleOf=5"`

Arrays

Tags []string `validate:"required,min=1,max=5,dive,alpha"` Emails []string `validate:"required,dive,email"` IDs []int `validate:"required,unique,dive,gt=0"`

Dates

BirthDate time.Time `validate:"required"` EventDate time.Time `validate:"required,gtefield=BirthDate"`

Conditional

ShipDifferent bool `validate:"boolean"` ShipAddress string `validate:"required_if=ShipDifferent true"`

Cross-Field

Password string `validate:"required,min=8"` ConfirmPassword string `validate:"required,eqfield=Password"`

Validation Tag Operators

OperatorDescriptionExample
,AND (all must pass)validate:"required,email,max=100"
``OR (at least one must pass)

Best Practices for Validation Rules

  1. Always use omitempty for optional fields

    Bio string `validate:"omitempty,min=10,max=500"`
  2. Use pointers for nullable fields

    Age *int `validate:"omitempty,gte=0"`
  3. Combine validations logically

    Email string `validate:"required,email,max=255"`
  4. Use custom validations for business rules

    Username string `validate:"required,username"` // Custom rule
  5. Always validate arrays with dive

    Emails []string `validate:"required,dive,email"`
  6. Use cross-field validation for related fields

    StartDate time.Time `validate:"required"` EndDate time.Time `validate:"required,gtefield=StartDate"`

Quick Reference Card

Most Used Validation Tags

// Required field Field string `validate:"required"` // Optional (validate only if present) Field string `validate:"omitempty,email"` // String constraints Field string `validate:"min=5,max=20"` Field string `validate:"email"` Field string `validate:"url"` Field string `validate:"alpha"` Field string `validate:"alphanum"` // Number constraints Field int `validate:"gte=18,lte=120"` Field int `validate:"gt=0"` Field int `validate:"oneof=1 2 3 4 5"` // Arrays Field []string `validate:"required,min=1,max=5"` Field []string `validate:"dive,email"` // Each element must be email // Cross-field validation Password string `validate:"required"` ConfirmPassword string `validate:"eqfield=Password"` // Conditional validation ShipDifferent bool `validate:"boolean"` ShipAddress string `validate:"required_if=ShipDifferent true"` // Enum validation Role string `validate:"oneof=admin user guest"`