【问题标题】:Check if submitted form data is a link and starts with a certain words检查提交的表单数据是否为链接并以特定单词开头
【发布时间】:2018-12-16 01:30:21
【问题描述】:

我想要一个系统,其中从我的输入字段提交的数据必须是一个 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>";
}

?>

感谢您的宝贵时间。

【问题讨论】:

  • 你不想检查链接是否包含“drive.google.com”或者你只想检查这是否是有效的链接?
  • 不正确@Smartpal
  • @Rainmx93 应该以drive.google.com开头
  • 那么你可以使用 substr($Link, 0, strlen($contains)) 函数来检查字符串是否以drive.google.com开头

标签: php html


【解决方案1】:

如果您的目标是检查某个字符串是否为 URL 并且是否有效,那么最简单的检查方法是使用validate filters,更具体地说是FILTER_VALIDATE_URL

if(filter_var('https://google.com', FILTER_VALIDATE_URL))
{
    // Url is valid

}
else
{
    // url is no valid
}

但请注意,httphttps 开头的字符串不被视为有效网址。这不是 PHP 或任何其他语言中的任何类型的错误,而是 Uniform Resource Identifier 的工作原理。


如果您的目标是严格检查字符串是否以 httphttps 开头,并且您可以简单地使用 strpos

if(strpos($url, `http`) === 0 || strpos($url, `https`) === 0) {
    // the url starts with http or https
    // strpos
}

请注意,我使用的是=== 0,这是因为strpos 返回字符串的位置,如果找不到则返回false。您想检查字符串httphttps 开头


还有正则表达式的路线。请参阅this 问题。

【讨论】:

  • 谢谢!通过一些更改,我让它通过你的方法工作。
【解决方案2】:

这是因为您的模式包含一个完整的 url,您通过变量在正则表达式中解析,并且您没有转义 http:// 中的 //,您需要使用 preg_quote(),如下所示

if(strlen($Link) <= 5 || !preg_match('/' . preg_quote($contains, '/') . '/', $Link)){
    echo "<script> alert('INVALID LINK!') </script>";
    exit;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多