@zddi/validator
v0.0.2
Published
一个用于验证各种数据格式的 TypeScript 库,特别针对 DNS 记录类型、IP 地址、域名等网络相关数据提供了完整的验证功能。
Readme
Validator
一个用于验证各种数据格式的 TypeScript 库,特别针对 DNS 记录类型、IP 地址、域名等网络相关数据提供了完整的验证功能。
DNS 记录类型验证
本库提供了完整的 DNS 记录类型(Rdata)验证功能。以下是支持的 DNS 记录类型及其验证规则:
A 记录
A 记录用于将域名映射到 IPv4 地址。
验证函数: isRdataA(value: string)
格式要求:
- 必须是有效的 IPv4 地址
- 格式:
x.x.x.x(每个 x 为 0-255)
示例:
import { isRdataA } from '@zdns/validator';
isRdataA('192.168.1.1'); // true
isRdataA('10.0.0.1'); // true
isRdataA('256.1.1.1'); // false (超出范围)
isRdataA('2001:db8::1'); // false (IPv6 地址)AAAA 记录
AAAA 记录用于将域名映射到 IPv6 地址。
验证函数: isRdataAAAA(value: string)
格式要求:
- 必须是有效的 IPv6 地址
- 支持完整格式和压缩格式(使用
::)
示例:
import { isRdataAAAA } from '@zdns/validator';
isRdataAAAA('2001:db8::1'); // true
isRdataAAAA('2001:0db8:85a3:0000:0000:8a2e:0370:7334'); // true
isRdataAAAA('::1'); // true
isRdataAAAA('192.168.1.1'); // false (IPv4 地址)NS 记录
NS 记录用于指定该域名的权威域名服务器。
验证函数: isRdataNS(value: string)
格式要求:
- 必须是有效的域名或区名称
- 支持以点结尾的完整域名
示例:
import { isRdataNS } from '@zdns/validator';
isRdataNS('ns1.example.com'); // true
isRdataNS('ns1.example.com.'); // true
isRdataNS('example.com.'); // true
isRdataNS('invalid..com'); // falseCNAME 记录
CNAME 记录用于创建域名的别名。
验证函数: isRdataCNAME(value: string)
格式要求:
- 必须是有效的域名
示例:
import { isRdataCNAME } from '@zdns/validator';
isRdataCNAME('www.example.com'); // true
isRdataCNAME('example.com'); // true
isRdataCNAME('invalid..com'); // falsePTR 记录
PTR 记录用于反向 DNS 查找,将 IP 地址映射到域名。
验证函数: isRdataPTR(value: string)
格式要求:
- 必须是有效的域名
- 常用于反向 DNS 区域(如
1.0.0.127.in-addr.arpa)
示例:
import { isRdataPTR } from '@zdns/validator';
isRdataPTR('example.com'); // true
isRdataPTR('1.0.0.127.in-addr.arpa'); // true
isRdataPTR('invalid..com'); // falseDNAME 记录
DNAME 记录用于创建域名的别名,与 CNAME 类似但用于整个域。
验证函数: isRdataDNAME(value: string)
格式要求:
- 必须是有效的域名
示例:
import { isRdataDNAME } from '@zdns/validator';
isRdataDNAME('example.com'); // true
isRdataDNAME('sub.example.com'); // trueTXT 记录
TXT 记录用于存储任意文本信息。
验证函数: isRdataTXT(value: string)
格式要求:
- 必须是非空字符串
- 可以包含任何字符
示例:
import { isRdataTXT } from '@zdns/validator';
isRdataTXT('any text'); // true
isRdataTXT('v=spf1 include:_spf'); // true
isRdataTXT(''); // falseSPF 记录
SPF 记录用于指定哪些邮件服务器被授权代表该域名发送邮件。
验证函数: isRdataSPF(value: string)
格式要求:
- 必须是非空字符串
- 通常包含 SPF 策略字符串
示例:
import { isRdataSPF } from '@zdns/validator';
isRdataSPF('v=spf1 include:_spf.google.com ~all'); // true
isRdataSPF('v=spf1 mx -all'); // true
isRdataSPF(''); // falseMX 记录
MX 记录用于指定该域名的邮件服务器。
验证函数: isRdataMX(value: string)
格式要求:
- 格式:
<优先级> <邮件服务器域名> - 优先级: 0-65535 的整数
- 邮件服务器: 有效的域名
示例:
import { isRdataMX } from '@zdns/validator';
isRdataMX('10 mail.example.com'); // true
isRdataMX('0 mail.example.com'); // true
isRdataMX('65535 mail.example.com'); // true
isRdataMX('65536 mail.example.com'); // false (优先级超出范围)
isRdataMX('10'); // false (缺少邮件服务器)CAA 记录
CAA 记录用于指定哪些证书颁发机构(CA)被授权为该域名颁发证书。
验证函数: isRdataCAA(value: string)
格式要求:
- 格式:
<标志> <标签> <值> - 标志: 0-255 的整数
- 标签:
issue、issuewild或iodef - 值: 用双引号括起来的字符串,长度 1-253
示例:
import { isRdataCAA } from '@zdns/validator';
isRdataCAA('0 issue "letsencrypt.org"'); // true
isRdataCAA('0 issuewild "letsencrypt.org"'); // true
isRdataCAA('0 iodef "mailto:[email protected]"'); // true
isRdataCAA('256 issue "letsencrypt.org"'); // false (标志超出范围)
isRdataCAA('0 invalid "letsencrypt.org"'); // false (无效标签)NAPTR 记录
NAPTR 记录用于动态重写规则,常用于 ENUM 和 SIP。
验证函数: isRdataNAPTR(value: string)
格式要求:
- 格式:
<顺序> <偏好> <标志> <服务> <正则表达式> <替换> - 顺序: 0-65535 的整数
- 偏好: 0-65535 的整数
- 标志: 单个字母或数字,可选引号
- 服务: 用双引号括起来的字符串
- 正则表达式: 用双引号括起来的字符串
- 替换: 有效的域名
示例:
import { isRdataNAPTR } from '@zdns/validator';
isRdataNAPTR('100 10 "u" "sip+E2U" "!^.*$!sip:[email protected]!" .'); // true
isRdataNAPTR('100 10 u sip+E2U "!^.*$!sip:[email protected]!" .'); // false (标志格式错误)SRV 记录
SRV 记录用于指定提供特定服务的服务器。
验证函数: isRdataSRV(value: string)
格式要求:
- 格式:
<优先级> <权重> <端口> <目标> - 优先级: 0-65535 的整数
- 权重: 0-65535 的整数
- 端口: 1-65535 的有效端口号
- 目标: 有效的域名
示例:
import { isRdataSRV } from '@zdns/validator';
isRdataSRV('0 5 5060 sipserver.example.com'); // true
isRdataSRV('10 60 8080 www.example.com'); // true
isRdataSRV('0 5 0 sipserver.example.com'); // false (端口无效)
isRdataSRV('0 5 5060'); // false (缺少目标)SOA 记录
SOA 记录用于指定区域的权威信息。
验证函数: isRdataSOA(value: string)
格式要求:
- 格式:
<主服务器> <负责人邮箱> <序列号> <刷新间隔> <重试间隔> <过期时间> <最小TTL> - 主服务器: 有效的域名
- 负责人邮箱: 有效的域名(邮箱格式,@ 替换为 .)
- 序列号: 0-2147483647 的整数
- 刷新间隔: 0-2147483647 的整数(秒)
- 重试间隔: 0-2147483647 的整数(秒)
- 过期时间: 0-2147483647 的整数(秒)
- 最小TTL: 0-2147483647 的整数(秒)
示例:
import { isRdataSOA } from '@zdns/validator';
isRdataSOA('ns1.example.com. admin.example.com. 2023010101 3600 1800 604800 86400'); // true
isRdataSOA('ns1.example.com. admin.example.com.'); // false (缺少参数)通用 Rdata 验证
验证函数: isRdata(value: string, type: string)
根据记录类型自动调用相应的验证函数。
支持的记录类型:
AAAAANSCNAMEPTRDNAMETXTSPFMXCAANAPTRSRVSOA
示例:
import { isRdata } from '@zdns/validator';
isRdata('192.168.1.1', 'A'); // true
isRdata('2001:db8::1', 'AAAA'); // true
isRdata('ns1.example.com', 'NS'); // true
isRdata('10 mail.example.com', 'MX'); // true
isRdata('invalid', 'INVALID'); // false (不支持的类型)使用示例
import { isRdataA, isRdataMX, isRdata, isDomainName, isIPv4 } from '@zdns/validator';
// 验证 A 记录
if (isRdataA('192.168.1.1')) {
console.log('有效的 A 记录');
}
// 验证 MX 记录
if (isRdataMX('10 mail.example.com')) {
console.log('有效的 MX 记录');
}
// 通用验证
if (isRdata('192.168.1.1', 'A')) {
console.log('有效的 A 记录');
}
// 验证域名
if (isDomainName('example.com')) {
console.log('有效的域名');
}
// 验证 IPv4
if (isIPv4('192.168.1.1')) {
console.log('有效的 IPv4 地址');
}注意事项
- 所有验证函数都返回布尔值(
true或false) - 域名验证支持国际化域名(IDN),会自动转换为 punycode 进行验证
- IPv6 地址支持完整格式和压缩格式
- 某些记录类型(如 MX、SRV)需要多个参数,使用空格分隔
- 字符串类型的值(如 CAA、NAPTR)需要使用双引号括起来
