警告并阻止表格

时间:2018-03-21 02:13:56

标签: html forms

如果它有一个网址,是否可以提醒并阻止提交简单表单?或者,更具体一点。我需要它来阻止任何这些输入类型:

  

https //domain.com /...

  

www domain.com //

  

domain.com

表格必须接受除网址之外的任何其他内容。

2 个答案:

答案 0 :(得分:0)

if (preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$your_field_name_here)){
        //put block message or redirect here
}

您可以尝试使用正则表达式来检查网址的存在并执行阻止/重定向操作。

答案 1 :(得分:0)

我不会阻止domain.com,因为它会将ASP.NET之类的文字视为错误的网址。无论如何,有几种方法可以做到这一点。

您可以使用strpos

function hasUrlLink($text) {
    $check = strpos($text, 'http:') !== false || strpos($text, 'https:') !== false || strpos($text, 'www.') !== false;

    if($check) {
        return true; // Link exists
    } else {
        return false; // Link does not exist
    }
}

$text = $_POST['text'];

if(hasUrlLink($text) === true) {
    echo 'Your text has a link in it.';
}

您也可以使用strstr(如果需要,也可以将其转换为函数):

$text = $_POST['text'];

if(strstr($text, 'http:') || strstr($text, 'https:') || strstr($text, 'www.')) {
    echo 'String contains a URL';
}

或者您也可以使用preg_match(正则表达式)。代码信用转到Seazoux。我刚刚清理了一下代码。:

function checkTextIfUrlExists($text) {
    $regex = "((https?|ftp)\:\/\/)?"; // SCHEME 
    $regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass 
    $regex .= "([a-z0-9-.]*)\.([a-z]{2,3})"; // Host or IP 
    $regex .= "(\:[0-9]{2,5})?"; // Port 
    $regex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // Path 
    $regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; // GET Query 
    $regex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?"; // Anchor

    if(preg_match("/^$regex$/", $text)) {
        return true;
    } else {
        return false;
    }
}

$text = $_POST['text'];

if(checkTextIfUrlExists($text)) {
    echo 'URL exists!';
} else {
    echo 'URL does not exist.';
}