所以这就是我需要做的事情。
如果用户输入了此内容:http://site.com
我需要删除http://
,以便字符串为site.com
,如果用户输入http://www.site.com
我需要删除http://www.
或者如果用户输入www.site.com
我需要删除www.
,或者他也可以输入site.com
它也会很好。
我在这里有一个功能,但是我的工作方式不合适,而且我在正则表达式上很糟糕。
preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $_POST['link'])
答案 0 :(得分:3)
改为使用filter_var()
。
if (filter_var($_POST['link'], FILTER_VALIDATE_URL)) {
// valid URL
} else {
// not valid
}
答案 1 :(得分:3)
还有parse_url功能。
答案 2 :(得分:2)
我认为我不会使用正则表达式,因为你只是在检查字符串开头的内容。所以:
$link = $_POST['link'];
if (stripos($link, 'http://') === 0)
{
$link = substr($link, 7);
}
elseif (stripos($link, 'https://') === 0)
{
$link = substr($link, 8);
}
if (stripos($link, 'www.') === 0)
{
$link = substr($link, 4);
}
应该照顾它。
答案 3 :(得分:0)
我总是和str_replace一起去哈哈
str_replace('http://','',str_replace('www.','',$url))
答案 4 :(得分:0)
我认为您正在寻找的是一个多阶段的preg_replace()
:
$tmp = strtolower($_POST['link']) ;
$tmp = preg_replace('/^http(s)?/', '', $tmp);
$domain = preg_replace('/^www./', '', $tmp) ;
这也简化了所需的正则表达式。