
本文介绍一种精准、健壮的正则表达式方案,用于校验用户输入的纯域名(如 example.com),严格拒绝含 http://、https:// 或 www. 开头的非法输入,并提供可直接集成的 php 验证逻辑与关键注意事项。
本文介绍一种精准、健壮的正则表达式方案,用于校验用户输入的纯域名(如 example.com),严格拒绝含 http://、https:// 或 www. 开头的非法输入,并提供可直接集成的 php 验证逻辑与关键注意事项。
在构建域名输入表单(如网站备案、SaaS 多租户子域配置等场景)时,常需确保用户仅提交「纯净域名」——即不带协议(http/https)和子域前缀(www)的标准域名格式,例如 example.com、api.beta.co.uk。若放行 www.example.com 或 https://www.php.cn/link/a11317a2c0af5fcd81607e85ad932bca,可能导致后续 DNS 解析、SSL 证书申请或路由匹配失败。
推荐使用以下正则表达式进行校验:
if (!preg_match('/^(?!(www|http|https)\.)\w+(\.\w+)+$/', $domain)) {
$output['message'][] = '域名格式不合法:请仅输入纯域名(如 example.com),不可包含 http://、https:// 或 www. 前缀。';
}
✅ 该正则解析说明:
- ^:字符串起始锚点;
- (?!(www|http|https)\.):负向先行断言,确保开头不是 www.、http. 或 https.(注意:此处 . 是字面量点号,非通配符);
- \w+:匹配至少一个字母、数字或下划线(覆盖 example、123test 等合法标签);
- (\.\w+)+:匹配一个或多个「点 + 标签」组合(支持多级域名如 .co.uk、.com.cn);
- $:字符串结束锚点,防止尾部冗余内容。
? 验证效果示例:
| 输入 | 是否通过 | 说明 |
|------|----------|------|
| example.com | ✅ | 标准二级域名 |
| api.beta.co.uk | ✅ | 合法多级域名(含公共后缀) |
| s3.amazonaws.com | ✅ | 支持含数字与多段结构 |
| www.example.com | ❌ | 被负向断言拦截 |
| https://www.php.cn/link/a11317a2c0af5fcd81607e85ad932bca | ❌ | https. 开头,立即拒绝 |
| http.example.com | ❌ | http. 匹配前缀,非法 |
| example. | ❌ | 缺少顶级域,(\.\w+)+ 要求至少一个完整 .+标签 |
⚠️ 重要注意事项:
- 该正则不校验 DNS 合法性(如长度限制、国际化域名 IDN、保留域等),仅做基础格式过滤;生产环境建议配合 filter_var($domain, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME) 进行二次验证;
- 若需支持中文域名(需 Punycode 编码),应在前端或服务端先转为 ASCII 形式再校验;
- 避免使用 /^[a-zA-Z. ]+$/ 类宽松模式——它允许空格、无法阻止协议前缀,且不支持数字和下划线,实用性极低。
综上,/^(?!(www|http|https)\.)\w+(\.\w+)+$/ 是兼顾准确性、可读性与兼容性的轻量级解决方案,可直接嵌入表单后端验证流程,显著提升域名输入数据的可靠性。











