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

PHP如何改进preg_match正则验证无http/https/www前缀的域名

PHP裸域名校验正则改进方案

原有逻辑缺陷

当前使用的正则和提示存在3个核心问题:

  • 正则/^[a-zA-Z. ]+$/仅允许输入字母、英文点、空格,既没有拦截禁止的http/https/www前缀,也没有校验域名的基本结构,甚至允许输入空格、连续点这类完全非法的内容
  • 错误提示文案逻辑写反,原文案提示用户域名要带http/https/www前缀,和实际校验要求完全相反
  • 没有提前处理用户输入首尾可能误带的空格,容易出现合法输入被误判的情况

改进后实现代码

直接替换原有的判断分支即可:

// 先去除输入首尾的空格,避免误判
$domain = trim($domain);
} elseif( !preg_match('/^(?!www\.|https?:\/\/)[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?\.[a-zA-Z]{2,}$/', $domain) ) {
    $output['message'][] = '请输入不带http、https、www前缀的裸域名,正确格式例如example.com、hello.com';
}

正则规则说明

这个正则完全匹配校验要求,各部分作用如下:

  • (?!www\.|https?:\/\/):负向预查逻辑,只要输入开头是www.、http://、https://就直接判定不通过,从根源拦截所有禁止的前缀格式
  • [a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?:匹配二级域名主体,要求首尾必须是字母或数字,中间允许出现连字符,既兼容普通英文域名,也不会放行连字符在首尾、含特殊字符的非法内容
  • \.[a-zA-Z]{2,}:匹配域名后缀的点和顶级域,要求顶级域至少2位字母,覆盖com、net、cn等绝大多数通用顶级域、国家顶级域格式
  • 首尾的^和$严格限制输入从开头到结尾必须完全符合规则,不会放行域名前后夹带多余字符的输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 18:27:41