JavaScript URL验证正则表达式

5
我有以下的 URL 验证正则表达式:
`/(ftp|https?)://[^ "]+$/`
这个来自这个引用: JavaScript 中的 URL 验证的正则表达式 它可以很好地运作,包括像 http://localhost:8080 这样的情况,但它也验证了我不想要的下面这些。上面的正则表达式不应该通过下面的 URL:
 1. http://www.example..com
 2. http://.com
 3. http://.
 4. http://www.example. 

作为一名 regex 新手,希望您能提供帮助。

第二个问题虽然与主题不太相关,但也涉及到 regex。当我将 null 和 undefined 与正则表达式 /^[a-z]+$/i 进行验证时,返回结果为 true。这是默认行为还是我遗漏了什么吗?


你所说的“失败”是什么意思?它们被标记为有效还是无效? - Philipp Sander
请查看此链接 - https://dev59.com/NHVC5IYBdhLWcg3w21Iq#8234912 - Moazzam Khan
2
这个问题已经被反复讨论过了。在提问之前,请务必务必搜索一下。 - coreyward
@hellojava,那是明显错误的。请查看“什么是检查字符串是否为有效URL的最佳正则表达式?”链接。我向您保证,他们不允许在不允许空格的地方使用空格。 - coreyward
@coreyward 不幸的是,我无法承担使用繁琐的正则表达式来验证IRI或所有规范的成本,因为情况可能会很多,所以我想用最低限度的规范来进行语法验证URL(就像我之前在参考网址中提到的那样)。在URL中提到的所有js regex都允许空格,或者无法验证本地服务器,例如http://localhost:8080。所以我最终到达了我在问题中发布的正则表达式,但是现在它只失败于上述情况。 - hellojava
显示剩余10条评论
3个回答

8

试试这个

function is_valid_url(url)
{
     return url.match(/^(ht|f)tps?:\/\/[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/);
}

在想验证网站的任何地方调用is_valid_url(YOUR_WEBSITE_URL)函数。


好的,我现在正在检查它。 - Chinmay235
{2,4}并不能涵盖大量顶级域名,特别是所有新的顶级域名。请参见http://data.iana.org/TLD/tlds-alpha-by-domain.txt,使用{2,22}可以覆盖大多数情况。 - Kyle Anderson
它确实验证了 \ 和 ˆ ! - Diego Favero

2

试一试...

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="http://jqueryvalidation.org/files/dist/jquery.validate.min.js"></script>
<script src="http://jqueryvalidation.org/files/dist/additional-methods.min.js"></script>
<script>
// just for the demos, avoids form submit
jQuery.validator.setDefaults({
  debug: true,
  success: "valid"
});
$( "#myform" ).validate({
  rules: {
    field: {
      required: true,
      url: true
    }
  }
});
</script>


0

我为 JavaScript 构建了 这个 正则表达式的 IP 和 DNS 验证。

/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?((([a-z0-9])*[:]){1}|(([a-z0-9])*[.]){1}|(([0-9]){1,3}([.]|[:])){3}(([0-9]){1,3}[:]){1})([a-z]{2,5}|[0-9]{1,5})([.]([a-z0-9]){1,3})?(\/.*)?$/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接