preg_match URL仅禁止所有文本的代码

时间:2013-12-30 18:02:17

标签: php forms if-statement preg-match

我有preg_match if语句只允许有效的URL,但它不允许任何文本。

我尝试输入各种不同的东西,例如:

http://www.google.com/
http://www.google.com
www.google.com
google.com

而且只是“Google”(无论如何都不应该工作),但它们都不起作用。

以下是代码:

  if (empty($_POST["link"]))
    {$linkErr = "A URL is required.";}
  elseif (!preg_match("%^((https?://)|(www\.))?([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i", $link))
    {$linkErr = "Please enter a valid URL.";}
  else
    {$link = test_input($_POST["link"]);}

只要文本框中有文字,就会输出“请输入有效的网址”,无论文字是什么。

1 个答案:

答案 0 :(得分:0)

根据Amal Murali的建议,使用内置的FILTER_VALIDATE_URL函数可以正常工作:http://php.net/filter_var

新的if语句为:

if (empty($_POST["link"]))
    {$linkErr = "A URL is required.";}
  elseif (filter_var($_POST["link"], FILTER_VALIDATE_URL) === FALSE)
    {$linkErr = "Please enter a valid URL.";}
  else
    {$link = test_input($_POST["link"]);}