preg_match域扩展什么有效

时间:2014-01-06 13:32:29

标签: php

伙计我试图阻止10个帖子以下的用户发送垃圾邮件链接帮助我使这段代码正常工作,我需要它来阻止 URL.tld URL.tld / something < /强>

function badwords(&$post)
{
    global $mybb, $db;

    if($mybb->user['postnum'] > 10)
    return;

    $badwords = explode('|', 'http|https|www|com|net|org|co.uk');
    foreach($badwords as $badword)
    {

        if(preg_match("/\b$badword\b/i", $post->data['message'], $match))
        {

            $post->errors['badwords']['error_code'] = "Error message goes here";

        }
    }
    return;

}

3 个答案:

答案 0 :(得分:0)

您可以使用此表达式: ^(http|https)?(:)?(/)?(/)?[a-z0-9]+([-.]{1}[a-z0-9]+).[a-z]{2,5}(:[0-9]{1,5})?(/.)?$

如果你想让那些虚假的东西变为真,你只需要这个位。[a-z] {2,5}可选。

如果你想忽略它,你应该将i添加到正则表达式的末尾。

$urls = array(
        'google.com/test', // true
        'http://google', // false
        '://google.com', // true
        ':google.com', // true
        ':/google.com', // true
        'www.google', // false
        'www.google.com' // true
    );

    $regex = '/^(http|https)?(:)?(\/)?(\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/';

    foreach($urls as $url){
        $t = preg_match($regex, $url, $match);
        var_dump($t);
    }

$urls = array( 'google.com/test', // true 'http://google', // false '://google.com', // true ':google.com', // true ':/google.com', // true 'www.google', // false 'www.google.com' // true ); $regex = '/^(http|https)?(:)?(\/)?(\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/'; foreach($urls as $url){ $t = preg_match($regex, $url, $match); var_dump($t); }

此处的实例:example

答案 1 :(得分:0)

您可以使用以下表达式:

^(http|https)?(:)?(/)?(/)?[a-z0-9]+([-.]{1}[a-z0-9]+).[a-z]{2,5}(:[0-9]{1,5})?(/.)?$

使用此功能,将阻止所有邮件,因为[a-z0-9] +)将阻止所有字母和数字。

答案 2 :(得分:-1)

匹配链接可以使用以下正则表达式模式完成:

function badwords(&$post)
{
    global $mybb, $db;

    if($mybb->user['postnum'] > 10)
    return;

    // build the regex pattern that matches URLs
    $regex = "%\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))%s";

    if(preg_match($regex, $post->data['message'], $match))
    {
        $post->errors['badwords']['error_code'] = "Error message goes here";
    }

    return;
}

然后可以在preg_match函数中使用此正则表达式模式。