javascript - 使用正则表达式验证 URL 是否安全?

标签 javascript regex validation url

在我的网络应用程序中,我有一个表单字段,用户可以在其中输入 URL。我已经在做一些初步的客户端验证,我想知道我是否可以使用正则表达式来验证输入的字符串是否是有效的 URL。那么,两个问题:

  1. 使用正则表达式这样做安全吗? URL 是一个复杂的野兽,就像您不应该使用正则表达式来解析 HTML 一样,我担心它也可能不适合 URL。
  2. 如果可以完成,什么是适合该任务的正则表达式? (我知道谷歌找到了无数的正则表达式,但我担心它们的质量)。

我的目标是防止 URL 出现在网页中但浏览器无法使用的情况。

最佳答案

嗯……也许吧。人们经常会问一个关于电子邮件地址的类似问题,对于这些问题,您需要一个非常复杂的正则表达式(即至少几页长)才能正确验证它们。我认为 URL 没有那么复杂(W3C 有一个 document 来描述它们的格式)但是,您提出的任何相当短的正则表达式都可能会阻止一些有效的 URL。

我建议考虑您需要接受哪些类型的 URL。也许出于您的目的,阻止偶尔有效但奇怪的提交是可以的,在这种情况下,您可以使用与大多数 URL 匹配的简单正则表达式,例如 Dobiatowski 的回答中的那个。或者您可以使用接受所有有效 URL 和一些无效 URL 的正则表达式(如果适合您的话)。但是我会小心翼翼地尝试找到一个正则表达式来接受所有有效的 URL 而没有无效的 URL。如果你想以这种方式进行 100% 的万无一失的验证,我建议使用我提到的第二种类型的客户端验证(接受一些无效的 URL)并在服务器端进行更全面的检查,使用一些以您用来处理表单数据的任何语言编写的库。

关于javascript - 使用正则表达式验证 URL 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3058138/

相关文章:

javascript - 使用 post 方法到 firebase 数据库的无效或意外 token

javascript - 2016 年 8 月 24 日 12 :44 AM Not valid in Safari on Mac

regex - 拒绝特定的正则表达式模式

java - 用于拆分字符串以获取运算符的正则表达式

c# - 参数组合的 ArgumentException

javascript - 如何验证 dojo OnDemandGrid 中的编辑器字段

javascript - 双向同步(解决时间依赖)

Javascript 连接具有相同键的数组的值

python - 在 Python 中使用 Re 删除双空格/制表符组合

javascript - 未捕获的类型错误 : Cannot read property 'reset' of null in Javascript