You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用jQuery preg_match验证SRV记录的正则表达式问题

修复SRV记录验证的正则表达式问题

我来帮你搞定这个SRV记录的正则验证问题!你之前的正则主要问题是对目标地址(域名/IP)的匹配范围太窄,而且正则结构有一些逻辑错误,导致无法识别带点的域名或者IP地址。

正确的正则表达式

首先直接给你能用的正则,完全覆盖你需要的格式:

/^(\d+)\s+(\d+)\s+(\d+)\s+([a-zA-Z0-9.-]+(?:\.[a-zA-Z0-9.-]+)*)(?:\s+)?$/

正则各部分解释

我拆开来给你讲每个部分的作用,方便你理解和调整:

  • ^ 和 $:确保我们匹配的是整个字符串,避免部分匹配的情况
  • (\d+):匹配优先级(PriorNumber),一个或多个数字,这是第一个捕获组
  • \s+:匹配一个或多个空格作为字段分隔符(支持多个空格的情况)
  • (\d+):匹配权重(WeightNumber),同样是一个或多个数字,第二个捕获组
  • (\d+):匹配端口(PortNumber),数字格式,第三个捕获组
  • ([a-zA-Z0-9.-]+(?:\.[a-zA-Z0-9.-]+)*):这是核心的目标地址匹配部分:
    • [a-zA-Z0-9.-]:允许字母、数字、点(域名的层级分隔)和连字符(域名中允许的字符)
    • (?:\.[a-zA-Z0-9.-]+)*:允许零或多个带点的后缀,支持多级域名(比如sip.example.com),也能匹配IPv4地址(比如192.168.0.1)
  • (?:\s+)?:可选的末尾空格,不捕获,满足你说的“整体最多5个部分”的灵活需求

测试用例

这个正则能正确匹配以下示例:

  • 100 1 4234 sipdsdfghj
  • 100 1 4234 sipdsdfghj.sadas
  • 50 10 5060 192.168.1.1
  • 0 0 80 example-co.com

同时会拒绝不符合格式的内容,比如:

  • 缺少目标地址的100 1 4234
  • 优先级/权重/端口不是数字的abc 1 4234 test
  • 包含非法字符的100 1 4234 test@bad-domain

jQuery中使用示例

把这个正则放到你的jQuery代码里验证输入:

// 定义正则
const srvRecordRegex = /^(\d+)\s+(\d+)\s+(\d+)\s+([a-zA-Z0-9.-]+(?:\.[a-zA-Z0-9.-]+)*)(?:\s+)?$/;

// 获取输入值
const inputVal = $('#your-input-element').val().trim(); // 先trim避免前后空格干扰

// 验证
if (srvRecordRegex.test(inputVal)) {
  alert('SRV记录格式正确!');
  // 这里可以获取捕获的字段值,比如优先级:srvRecordRegex.exec(inputVal)[1]
} else {
  alert('请输入正确格式的SRV记录:优先级 权重 端口 目标地址');
}

扩展:支持IPv6地址

如果你的场景需要支持IPv6格式的目标地址(比如[2001:db8::1]),可以把正则修改为:

/^(\d+)\s+(\d+)\s+(\d+)\s+([a-zA-Z0-9.-]+(?:\.[a-zA-Z0-9.-]+)*|\[[0-9a-fA-F:]+\])(?:\s+)?$/

新增的\[[0-9a-fA-F:]+\]部分用来匹配带方括号的IPv6地址。

内容的提问来源于stack exchange,提问作者Mitch Daniels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:56:52