Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP URL验证_Php_Regex - Fatal编程技术网

PHP URL验证

PHP URL验证,php,regex,Php,Regex,我知道有无数的线程在问这个问题,但我还没有找到一个可以帮助我解决这个问题的线程 我基本上是试图解析一个大约10000000个URL的列表,确保它们根据以下标准有效,然后获取根域URL。此列表包含您可以想象的所有内容,包括以下内容和预期的格式化url: biy.ly/test [VALID] [return - bit.ly] example.com/apples?test=1&id=4 [VALID] [return - example.com] host101.wow404.apple

我知道有无数的线程在问这个问题,但我还没有找到一个可以帮助我解决这个问题的线程

我基本上是试图解析一个大约10000000个URL的列表,确保它们根据以下标准有效,然后获取根域URL。此列表包含您可以想象的所有内容,包括以下内容和预期的格式化url:

biy.ly/test [VALID] [return - bit.ly]
example.com/apples?test=1&id=4 [VALID] [return - example.com]
host101.wow404.apples.test.com/cert/blah [VALID] [return - test.com]
101.121.44.xxx [**inVALID**] [return false]
localhost/noway [**inVALID**] [return false]
www.awesome.com [VALID] [return - awesome.com]
i am so awesome [**inVALID**] [return false]
http://404.mynewsite.com/visits/page/view/1/ [VALID] [return - mynewsite.com]
www1.151.com/searchresults [VALID] [return - 151.com]
有人对此有什么建议吗*$

编辑

在php中,这将是preg_match'^[a-zA-Z]\[a-zA-Z]+[0-9]{1,3}\[0-9]{1,3}/*$,$myURL,$matches

您需要的是$matches[1]

解释

^                # start-of-line
(?:              # begin non-capturing group
  https?         #   "http" or "https"
  ://            #   "://"
)?               # end non-capturing group, make optional
(?:              # start non-capturing group
  [a-z0-9-]+\.   #   a name part (numbers, ASCII letters, dashes) & a dot
)*               # end non-capturing group, match as often as possible
(                # begin group 1 (this will be the domain name)
  (?:            #   start non-capturing group
    [a-z0-9-]+\. #     a name part, same as above
  )              #   end non-capturing group
  [a-z]+         #   the TLD
)                # end group 1 

我将从默认设置开始:

filter_var($inputUrl, FILTER_VALIDATE_URL);
然后添加不可接受的特殊情况,以便进一步验证。这应该简化一点

至于得到主人

parse_url($inputUrl, PHP_URL_HOST);

您并没有真正按照给定的标准验证任何内容。您是否还想进行WHOIS查找以查看该域的实际存在情况?请参见[此处][1][1]:您到底想做什么?localhost是一个有效的URL。SomeveryLongDomainName可能也是,但可能不存在。@yAnTar:注释中链接的语法是[link text]URL。我找不到一个能帮我解决这个问题的方法。-你看得不够仔细。域名可能包含除拉丁符号以外的其他字符。即使中提到www1.151.com,此regexp也会失败question@RohitChopra这绝对不是事实。FILTER_VALIDATE_URL根据RFC 2396规范对有效URL进行验证。还有两个可选标志可用于此验证器,FILTER_FLAG_PATH_REQUIRED和FILTER_FLAG_QUERY_REQUIRED。谢谢。喜欢这个解释。对于读者来说,请记住URL可以有非ascii字符。这个正则表达式不匹配http://myurl.com/?utf8=✓ 看见添加utf8参数是在旧浏览器中强制使用utf8编码的一个技巧,请参见@DanatheSane You's very right。事实上,应该使用一些更为深思熟虑的方法,比如。感谢链接,似乎很难找到解决这个问题的全面解决方案。
parse_url($inputUrl, PHP_URL_HOST);
$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$w$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
  {
  $websiteErr = "Invalid URL";
  }ebsite))
  {
  $websiteErr = "Invalid URL";
  }