如何校验输入的网址格式_INPUT类型为URL进行基础验证

浅涛君_8861

浅涛君_8861

2026-05-27

491人浏览

原创

input[type="url"]不可靠,仅粗略检查结构;应配合required、trim()及new url()或php filter_var()做后端校验,并按业务白名单限制域名与协议。

如何校验输入的网址格式_input类型为url进行基础验证

input[type="url"] 不能当作可靠校验手段,它只拦得住明显乱输(比如 abc 或空值),但放得过大量“结构上勉强像 URL”的输入——比如 foo://bar、https:///example.com、www.example,甚至带中文路径的原始字符串。

为什么 input[type="url"] 总是“看起来能用,实际拦不住”

浏览器内部只检查是否含冒号+双斜杠+点号这类粗粒度结构,不验证协议是否存在、域名能否解析、路径是否符合 RFC 3986。它本质是个轻量提示控件,不是校验器。

  • 必须搭配 required 才能管“有没有”,否则空值也能提交
  • 移动端粘贴时若带首尾空格或换行符,原生校验直接失效
  • Safari 和旧版 Android WebView 对它的行为不一致,错误提示时机和文案都可能不同
  • 它对相对路径(如 /api/data)或 file:///、git:// 这类协议完全不设防

用 pattern 能补多少?怎么写才不翻车

可以有限增强,但正则要避开几个经典坑:浏览器会自动给 pattern 加上 ^ 和 $,你不能再自己写;它也不校验空格,所以仍需 JS 配合 trim()。

Wechat Article Html
Wechat Article Html

将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。

下载
  • 强制 http/https 开头:pattern="https?://[^\s/$.?#].[^\s]*"(末尾必须有 [^\s]*,否则 http://a b 也能过)
  • 别抄网上“匹配所有 URL”的超长正则——容易回溯爆炸,或拒绝 localhost:3000、https://例.com 这类合法地址
  • pattern 只对 type="url" 生效,但它和原生校验逻辑并存,冲突时表现难预测

JS 里用 new URL() 比正则更靠谱

现代浏览器中,new URL(string) 会真正尝试解析,遇到格式非法就抛 TypeError,比手写正则稳定得多,代码也更短。

  • 必须先 string.trim(),否则 " https://a " 直接报错
  • 只用于绝对 URL 校验;如果业务允许相对路径(如 /login),就别用它
  • 示例函数:function isValidUrl(s) { try { new URL(s.trim()); return true; } catch (_) { return false; } }
  • 注意:它仍不查 DNS、不验证书、不判断是否可访问,只是格式守门员

后端 PHP 必须独立做 filter_var($url, FILTER_VALIDATE_URL)

前端任何验证都可被绕过——禁用 JS、改 DOM、curl 直发请求,都能跳过所有前端逻辑。PHP 端不能信任 $_POST['url'] 已“被过滤过”。

  • 必须先 trim(),否则带空格的字符串直接失败
  • FILTER_VALIDATE_URL 遵循 RFC 3986,支持 IPv6、中文域名等合法格式,比手写正则可靠
  • 若只要 HTTP/HTTPS,再用 parse_url() 提取 scheme 并限定为 in_array($parsed['scheme'], ['http', 'https'])
  • 空字符串、仅空白字符、协议后无内容(如 https://)都会返回 false,需单独处理

最容易被忽略的一点:URL 格式合法 ≠ 安全可用。哪怕 filter_var() 和 new URL() 都通过了,仍要按业务场景做白名单限制(比如只允许 GitHub 域名)、DNS 可解析性检查、甚至 HTTPS 证书验证——这些都得在后端做,且不能省。

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

6595

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3672

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3350

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

3359

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

5019

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

3301

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

3109

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

2728

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2828

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 226人学习