NetLife Guru

Open source Go packages for fast, maintainable web systems. Built with a documentation-first approach.

Product
OverviewGolang packagesNews
Documentation
DocumentationGo LoggerGo RouterGo DB Form
Company
OverviewContactNewsGitHub
Community / Support
Supportinfo@netlife.guru
© 2026 NetLife Guru. All rights reserved.
GitHubinfo@netlife.guru
NetLife GuruNetLife GuruNetLife Guru
NetLife GuruNetLife GuruNetLife Guru
OverviewDocumentationNewsSupportContact

Golang packages

About
Validation RulesBoolean RulesFloat64 RulesInteger RulesString RulesTime RulesRequired RulesSlice RulesFormat RulesGeneric RulesCompare Rules
Form ValidatorRules

Format Rules

Learn how to validate common string formats in NLG Form, including URLs, IP addresses, UUIDs, JSON strings, and IANA timezones.

Format rules validate typed string fields defined with form.Str.

They are useful when a string must follow a specific external format such as an HTTP URL, IP address, UUID, JSON value, or IANA timezone name.

Common Use Cases

Format rules are commonly used for:

  • website URLs
  • callback URLs
  • IP allowlists
  • UUID identifiers
  • JSON configuration strings
  • timezone preferences
  • API payload validation
  • integration settings
  • user profile settings
  • system configuration forms

TL;DR

RuleDescription
rules.URL(field)Requires the string to be a valid http:// or https:// URL
rules.URLWithCode(field, code)Same as URL with a custom error code
rules.IP(field)Requires the string to be a valid IP address
rules.IPWithCode(field, code)Same as IP with a custom error code
rules.UUID(field)Requires the string to be a valid UUID
rules.UUIDWithCode(field, code)Same as UUID with a custom error code
rules.JSON(field)Requires the string to contain valid JSON
rules.JSONWithCode(field, code)Same as JSON with a custom error code
rules.Timezone(field)Requires the string to be a valid IANA timezone
rules.TimezoneWithCode(field, code)Same as Timezone with a custom error code

Defining Format Fields

Format validation starts with typed string fields.

FormatForm := struct {
	Website  form.StringField[FormatRulesRequest]
	ClientIP form.StringField[FormatRulesRequest]
	UserID   form.StringField[FormatRulesRequest]
	Config   form.StringField[FormatRulesRequest]
	Timezone form.StringField[FormatRulesRequest]
}{
	Website: form.Str[FormatRulesRequest]("website", func(r *FormatRulesRequest) string {
		return r.Website
	}),
	ClientIP: form.Str[FormatRulesRequest]("client_ip", func(r *FormatRulesRequest) string {
		return r.ClientIP
	}),
	UserID: form.Str[FormatRulesRequest]("user_id", func(r *FormatRulesRequest) string {
		return r.UserID
	}),
	Config: form.Str[FormatRulesRequest]("config", func(r *FormatRulesRequest) string {
		return r.Config
	}),
	Timezone: form.Str[FormatRulesRequest]("timezone", func(r *FormatRulesRequest) string {
		return r.Timezone
	}),
}

Applying Format Rules

Format rules are attached directly to typed string field references.

return form.Schema[FormatRulesRequest]{
	rules.URL(FormatForm.Website),
	rules.IP(FormatForm.ClientIP),
	rules.UUID(FormatForm.UserID),
	rules.JSON(FormatForm.Config),
	rules.Timezone(FormatForm.Timezone),
}

Rule Examples

URL

Requires the string to be a valid HTTP or HTTPS URL.

rules.URL(FormatForm.Website)

Valid examples:

https://example.com
http://localhost:8080

URLWithCode

const CodeInvalidURL = form.Code("invalid_url")

rules.URLWithCode(
	FormatForm.Website,
	CodeInvalidURL,
)

IP

Requires the string to be a valid IP address.

rules.IP(FormatForm.ClientIP)

Valid examples:

127.0.0.1
192.168.1.10
::1

IPWithCode

const CodeInvalidIP = form.Code("invalid_ip")

rules.IPWithCode(
	FormatForm.ClientIP,
	CodeInvalidIP,
)

UUID

Requires the string to be a valid UUID.

rules.UUID(FormatForm.UserID)

Valid example:

550e8400-e29b-41d4-a716-446655440000

UUIDWithCode

const CodeInvalidUUID = form.Code("invalid_uuid")

rules.UUIDWithCode(
	FormatForm.UserID,
	CodeInvalidUUID,
)

JSON

Requires the string to contain valid JSON.

rules.JSON(FormatForm.Config)

Valid examples:

{"enabled":true}
["api", "admin"]

JSONWithCode

const CodeInvalidJSON = form.Code("invalid_json")

rules.JSONWithCode(
	FormatForm.Config,
	CodeInvalidJSON,
)

Timezone

Requires the string to be a valid IANA timezone name.

rules.Timezone(FormatForm.Timezone)

Valid examples:

Europe/Bratislava
UTC
America/New_York

TimezoneWithCode

const CodeInvalidTimezone = form.Code("invalid_timezone")

rules.TimezoneWithCode(
	FormatForm.Timezone,
	CodeInvalidTimezone,
)

Complete Example

package main

import (
	"github.com/netlifeguru/form"
	"github.com/netlifeguru/form/rules"
)

type FormatRulesRequest struct {
	Website  string `json:"website"`
	ClientIP string `json:"client_ip"`
	UserID   string `json:"user_id"`
	Config   string `json:"config"`
	Timezone string `json:"timezone"`
}

func FormatRulesSchema() form.Schema[FormatRulesRequest] {
	FormatForm := struct {
		Website  form.StringField[FormatRulesRequest]
		ClientIP form.StringField[FormatRulesRequest]
		UserID   form.StringField[FormatRulesRequest]
		Config   form.StringField[FormatRulesRequest]
		Timezone form.StringField[FormatRulesRequest]
	}{
		Website: form.Str[FormatRulesRequest]("website", func(r *FormatRulesRequest) string {
			return r.Website
		}),
		ClientIP: form.Str[FormatRulesRequest]("client_ip", func(r *FormatRulesRequest) string {
			return r.ClientIP
		}),
		UserID: form.Str[FormatRulesRequest]("user_id", func(r *FormatRulesRequest) string {
			return r.UserID
		}),
		Config: form.Str[FormatRulesRequest]("config", func(r *FormatRulesRequest) string {
			return r.Config
		}),
		Timezone: form.Str[FormatRulesRequest]("timezone", func(r *FormatRulesRequest) string {
			return r.Timezone
		}),
	}

	return form.Schema[FormatRulesRequest]{
		rules.URL(FormatForm.Website),
		rules.IP(FormatForm.ClientIP),
		rules.UUID(FormatForm.UserID),
		rules.JSON(FormatForm.Config),
		rules.Timezone(FormatForm.Timezone),
	}
}

Notes

  • Format rules operate on typed Go string values.
  • Empty strings are ignored unless the field is also marked as required.
  • Use rules.Required(field) together with format rules when the value must be present.
  • URL accepts http:// and https:// URLs.
  • IP supports both IPv4 and IPv6 values.
  • Timezone validates IANA timezone names through Go’s time.LoadLocation.
  • Custom error codes are recommended for public API responses and frontend integrations.
  • Format validation remains explicit, reusable, and independent from HTTP or JSON transport layers.

Slice Rules

Learn how to validate slice and array fields in NLG Form using length validation, emptiness checks, containment rules, uniqueness validation, and custom error codes.

Generic Rules

Learn how to validate generic comparable values in NLG Form using reusable allowed-value rules for strings, integers, booleans, enums, statuses, plans, and custom validation codes.

On this page

Common Use CasesTL;DRDefining Format FieldsApplying Format RulesRule ExamplesURLURLWithCodeIPIPWithCodeUUIDUUIDWithCodeJSONJSONWithCodeTimezoneTimezoneWithCodeComplete ExampleNotes