我有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"]);}
只要文本框中有文字,就会输出“请输入有效的网址”,无论文字是什么。
答案 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"]);}