Help us shape the future of Go! Take the 2026 Go Developer Survey

validx

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 3, 2026 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package validx 提供无状态、仅依赖标准库的参数格式验证函数。

支持中国大陆手机号、常用 ASCII 邮箱、HTTP/HTTPS URL、IPv4/IPv6、 ASCII 数字串及 UTF-8 rune 长度范围。函数可并发调用,非法输入返回 false。 不自动清理空白、补协议、删除国家码或归一化 Unicode,不访问网络。 格式通过不代表号码已分配、邮箱存在或地址可达;必填、可选字段和业务错误由调用方处理。

手机号只做 1[3-9][0-9]{9} 的完整格式初筛,不维护运营商号段表。 邮箱采用未加引号的 dot-atom 本地部分和至少两段的 ASCII 域名, 不接受显示名称、注释、地址列表、IP 字面量域名或原始 Unicode 邮箱。 主机名每段为 1~63 字节的 ASCII 字母、数字或连字符,连字符不能位于段首尾, 总长最多 253 字节;邮箱域名不接受尾部根点,不检查顶级域名清单或 IDNA 编码含义。 HTTP URL 允许单段主机名、一个尾部根点、私有及回环地址; 仅由数字和点组成的主机须严格符合 IPv4 语法,不接受简写数字地址。 完整输入须为合法 UTF-8,百分号转义须合法,不能包含未转义空白或控制字符。 IP 验证不接受端口、CIDR、方括号或 zone,IPv4 映射 IPv6 仍归 IPv6。

除 RuneLenBetween 在 min 为 0 时可接受空字符串外,格式函数均拒绝空字符串。 长度按 Unicode 码点数计算,不按字节或字素簇计算;组合 emoji 可能包含多个 rune。

以下示例需导入 errors 和 github.com/bpcoder16/pixiu/validx:

func validateContact(mobile, email, nickname string) error {
	if !validx.IsMobileCN(mobile) {
		return errors.New("手机号格式错误")
	}
	if email != "" && !validx.IsEmail(email) {
		return errors.New("邮箱格式错误")
	}
	if !validx.RuneLenBetween(nickname, 2, 20) {
		return errors.New("昵称长度应为 2~20 个字符")
	}
	return nil
}
Example
package main

import (
	"fmt"

	"github.com/bpcoder16/pixiu/validx"
)

func main() {
	fmt.Println(validx.IsMobileCN("13800138000"))
	fmt.Println(validx.IsEmail("user.name+tag@example.com"))
	fmt.Println(validx.IsHTTPURL("https://example.com/path?q=value"))
	fmt.Println(validx.IsIP("::1"))
	fmt.Println(validx.IsIPv4("192.0.2.1"))
	fmt.Println(validx.IsIPv6("::ffff:192.0.2.1"))
	fmt.Println(validx.IsDigits("00123"))
	fmt.Println(validx.RuneLenBetween("昵称", 2, 20))
	fmt.Println(validx.IsMobileCN("+8613800138000"))
}
Output:
true
true
true
true
true
true
true
true
false

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func IsDigits

func IsDigits(s string) bool

IsDigits 检查非空字符串是否仅包含 ASCII 数字 0~9,允许前导零。

func IsEmail

func IsEmail(s string) bool

IsEmail 检查常用的 ASCII 邮箱格式,不验证邮箱是否存在。 仅接受未加引号的 dot-atom 本地部分和至少两段的 ASCII 域名; 本地部分最多 64 字节,完整地址最多 254 字节。 不接受显示名称、注释、地址列表、IP 字面量域名或原始 Unicode 邮箱。

func IsHTTPURL

func IsHTTPURL(s string) bool

IsHTTPURL 检查绝对 HTTP/HTTPS 地址格式,不验证可达性或访问权限。 主机支持 ASCII 域名、单段主机名、IPv4 和方括号 IPv6(不含 zone), 主机名可带一个尾部根点;显式端口须为十进制 1~65535。 接受标准库支持的 userinfo、Unicode 路径、查询和 fragment; 拒绝非法 UTF-8、未转义空白或控制字符,以及不完整或非法的百分号转义。

func IsIP

func IsIP(s string) bool

IsIP 检查纯 IPv4 或 IPv6 地址,不接受端口、CIDR、方括号或 zone。

func IsIPv4

func IsIPv4(s string) bool

IsIPv4 检查点分十进制 IPv4 地址,不接受前导零或 IPv4 映射 IPv6。

func IsIPv6

func IsIPv6(s string) bool

IsIPv6 检查无 zone 的纯 IPv6 地址,IPv4 映射形式仍归 IPv6。

func IsMobileCN

func IsMobileCN(s string) bool

IsMobileCN 检查中国大陆手机号的宽松格式:11 位 ASCII 数字,以 1 开头,第二位为 3~9。 不接受国家码、空白或分隔符,不检查号段是否已分配或号码是否开通。

func RuneLenBetween

func RuneLenBetween(s string, min, max int) bool

RuneLenBetween 检查合法 UTF-8 字符串的 rune 数量是否位于闭区间 [min, max]。 负数边界或 min > max 返回 false;min 为 0 时允许空字符串。 不做归一化或空白清理,组合 emoji 可能包含多个 rune。

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL