我需要检查一个表单字段是否是一个有效的URL(它可以通过HTML5完成,但不是每个浏览器都有它),我找不到一个好的URL检查器功能。这很奇怪,因为通过电子邮件检查,有很多已经完成的功能。
我已经看到(我刚刚发现它)filter_var()
函数,但正如我所读,网址存在一些问题。
我可以找到一些正则表达式,但它们似乎并不详尽。
你知道任何好的网址检查功能吗?
答案 0 :(得分:1)
这是因为URL格式可以如此通用:
Http// is optionnal
www is optionnal
.com, .net, .us, etc so many possible pattern
.html, /, .php, or nothing are possible ends
我建议你建立自己的功能,而不是使用预制功能,具体取决于你的大多数用户发送网址的方式,以及结尾等...
我的两分钱。
答案 1 :(得分:1)
让我们先进一步:
<?php
function validate_url($url) {
return (bool)preg_match("
/^ # Start at the beginning of the text
(?:ftp|https?|feed):\/\/ # Look for ftp, http, https or feed schemes
(?: # Userinfo (optional) which is typically
(?:(?:[\w\.\-\+!$&'\(\)*\+,;=]|%[0-9a-f]{2})+:)* # a username or a username and password
(?:[\w\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]{2})+@ # combination
)?
(?:
(?:[a-z0-9\-\.]|%[0-9a-f]{2})+ # A domain name or a IPv4 address
|(?:\[(?:[0-9a-f]{0,4}:)*(?:[0-9a-f]{0,4})\]) # or a well formed IPv6 address
)
(?::[0-9]+)? # Server port number (optional)
(?:[\/|\?]
(?:[\w#!:\.\?\+=&@$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2}) # The path and query (optional)
*)?
$/xi", $url);
}
?>
主要来自Drupal中的valid_url函数。
使用示例:
validate_url($url); // this will return TRUE if the URL is correct. Protocol should exist in $url
答案 2 :(得分:0)
或尝试不同的方法。
为什么不查看file_get_contents($url)
?这样您还可以知道URL是否有效。
我想你可以使用fread(fopen($url,'r'),100);
这样的东西,所以不能注入一些大文件。检查 localhost 之类的内容仍然是您可能想要做的事情。