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 IsEmail ¶
IsEmail 检查常用的 ASCII 邮箱格式,不验证邮箱是否存在。 仅接受未加引号的 dot-atom 本地部分和至少两段的 ASCII 域名; 本地部分最多 64 字节,完整地址最多 254 字节。 不接受显示名称、注释、地址列表、IP 字面量域名或原始 Unicode 邮箱。
func IsHTTPURL ¶
IsHTTPURL 检查绝对 HTTP/HTTPS 地址格式,不验证可达性或访问权限。 主机支持 ASCII 域名、单段主机名、IPv4 和方括号 IPv6(不含 zone), 主机名可带一个尾部根点;显式端口须为十进制 1~65535。 接受标准库支持的 userinfo、Unicode 路径、查询和 fragment; 拒绝非法 UTF-8、未转义空白或控制字符,以及不完整或非法的百分号转义。
func IsMobileCN ¶
IsMobileCN 检查中国大陆手机号的宽松格式:11 位 ASCII 数字,以 1 开头,第二位为 3~9。 不接受国家码、空白或分隔符,不检查号段是否已分配或号码是否开通。
func RuneLenBetween ¶
RuneLenBetween 检查合法 UTF-8 字符串的 rune 数量是否位于闭区间 [min, max]。 负数边界或 min > max 返回 false;min 为 0 时允许空字符串。 不做归一化或空白清理,组合 emoji 可能包含多个 rune。
Types ¶
This section is empty.