我有这个正则表达式。如何更改它以允许非www地址?
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$link))
{
echo '<label style="color:#fff">Sorry, your link is not in a valid address format.</label><br>';
$error = 1;
}
我在正则表达式上非常糟糕:(
答案 0 :(得分:2)
您只需指定www\.
子模式可选。
要使子模式可选,您可以将其放入非捕获组并在其后设置?
量词。因此,请将www\.
更改为(?:www\.)?
。
请参阅PHP demo
$link = "google.com";
if (!preg_match('/\b(?:(?:https?|ftp):\/\/|(?:www\.)?)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i',$link))
{ // ^^^ ^^ - OPTIONAL GROUP
echo '<label style="color:#fff">Sorry, your link is not in a valid address format.</label><br>';
$error = 1;
}
else echo "Good link!"; // => Good link!