我想要一个系统,其中输入字段中提交的数据必须是URL,并在PHP中以“ http://”或“ https://”开头。但是当我提交表单时,它会不断提醒“无效链接”,可以修复它吗?
<?php
if(isset($_POST['Title'])){
$Title=$_POST['Title'];
}if(isset($_POST['Description'])){
$Description=$_POST['Description'];
}if(isset($_POST['Link'])){
$Link=$_POST['Link'];
}
if(strlen($Title) <= 5){
echo "<script> alert('Title should be more than 5 characters!')</script>";
exit;
}
if(strlen($Description) <= 5){
echo "<script> alert('Description should be more than 5 characters!')</script>";
exit;
}
$contains = "https://drive.google.com/";
if(strlen($Link) <= 5 || !preg_match("/\b($contains)\b/", $Link)){
echo "<script> alert('INVALID LINK!') </script>";
exit;
}
else{
echo "<script> alert('DONE!') </script>";
}
?>
感谢您的时间。
答案 0 :(得分:0)
如果您的目标是检查某个字符串是否为URL,并且是有效字符串,那么最简单的检查方法是使用validate filters,更具体地说是FILTER_VALIDATE_URL
。
if(filter_var('https://google.com', FILTER_VALIDATE_URL))
{
// Url is valid
}
else
{
// url is no valid
}
但是请注意,不以http
或https
开头的字符串不被视为有效的网址。这不是PHP或任何其他语言中的任何类型的错误,而是Uniform Resource Identifier的工作方式。
如果您的目标是严格检查字符串是否以http
或https
开头,并且仅使用strpos
if(strpos($url, `http`) === 0 || strpos($url, `https`) === 0) {
// the url starts with http or https
// strpos
}
请注意,我使用=== 0
是因为strpos
返回字符串的位置,如果找不到则返回false
。您要检查字符串以http
还是https
开头。
还有正则表达式的路由。请参阅this问题。
答案 1 :(得分:0)
这是因为您的模式包含要通过变量在正则表达式中解析的完整URL,并且您没有在//
中转义http://
,而需要使用preg_quote()
像下面一样
if(strlen($Link) <= 5 || !preg_match('/' . preg_quote($contains, '/') . '/', $Link)){
echo "<script> alert('INVALID LINK!') </script>";
exit;
}