【问题标题】:regex to check valid url either http or www [duplicate]正则表达式来检查有效的网址,无论是 http 还是 www [重复]
【发布时间】:2015-07-30 05:21:59
【问题描述】:

我想检查用户插入的 URL 是否有效。 我有不同的情况允许用户插入 URL

1) www.test.com (valid)
2) http://test.com (valid)
3) http://www.test.com (valid)
4) www.test (not valid)

所以这样用户将能够插入wwwhttp,如果用户仅插入www,则在URL 之前预先附加http://。 我发现了很多正则表达式,但他们严格检查http://

提前致谢。

【问题讨论】:

  • “Append before”在术语上是矛盾的。您要查找的词是“前置”。
  • 不以www开头的网址怎么办?
  • 但是 www.test 可能是一个有效的域...
  • @Dwev 需要以 http:// 或 www 开头。

标签: php regex url-validation


【解决方案1】:

请参阅this 链接可能会对您有所帮助。

<?php
// Variable to check
$url = "http://www.w3schools.com";

// Validate url
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
     echo("$url is a valid URL");
} else {
     echo("$url is not a valid URL");
}
?>

【讨论】:

  • 知道这与新 TLD 的效果如何,例如“subsite.site.ninja”可能是一个有效的网址(理论上)?
  • 是的,它也适用于 subsite.site.ninja。
  • 如果不存在预附加http怎么办?
  • @NikunjChotaliya 如果我输入 www.test.com 它返回失败。
【解决方案2】:

我认为在第 3 点。你有一个错误。你写了“www”

除此之外,正确的正则表达式模式可能如下:

^(https?:\/\/)?(www\.)?[a-z0-9]+\.[a-z0-9]{2,3}$

【讨论】:

  • 还有example.info这样的域名; example.name; example.berlin 等等不考虑这个正则表达式。
  • 所以它会检查http是否存在,如果不存在则预先附加它。那么它是如何工作的呢?
  • 问号设置前面的符号或组可选,表示“http://”或“https://”可以存在或不存在,如果存在则不能不同。与(www\.) 组相同,因为后面有一个问号。 ^ at start 表示字符串中的任何内容都不能在“http”之前
猜你喜欢
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 2016-04-23
  • 2016-09-09
相关资源
最近更新 更多