让Z-Blog评论必须填邮箱、网址等信息 [复制链接]

帖子链接已复制到剪贴板
V 懋和道人 (UID: 1319) 26天前

198 0

鸣谢@隔壁老李@拓源网@沉冰浮水@豫唐网络四位大佬的思路及技术支撑,使得小道又学会了一个巧妙地姿势。

image.png

缘起啊,说来话长。有位道友找小道换友链,结果在写评论的时候,居然邮箱、主页什么的全都没填,小道一看,无法通知他,心中愤愤不平,真是气得七窍生烟。于是我,修道的老李,心里想着,不能再让这种事发生了,决定尝试搞个Z-Blog评论强制填写邮箱、网址的功能。更妙的是,用户名还得带两个以上的中文字符,岂能随意。说实话,起初我在拓源主题的Z-Blog群里有些忐忑,毕竟小道对Z-Blog的那些钩子、机制也不甚了了,早已忘得七七八八,心里多少有点不好意思开口。不过转念一想,不问又如何能进步?那不成了道途上的障碍?其实隔壁的老李,那才是真有悟性,写代码时下笔如有神助,一写一个准,我看了也是心生佩服。虽说修道有成,我在这编程之道上,还得多向那老李请教一二啊。

image.png

于是,我根据隔壁老李和沉冰浮水提供的思路,巧妙地写下了下面的代码,主要是几个功能,一是邮箱必填和网址必填,而且是完全需要填写正确的内容,否则正则判断后不正确,你还得重新填写对应内容;二是用户名必须不少于两个字符,且需要包含中文,否则正则不通过,依旧要重填。这样一来,我如果回复了用户的评论后,就可以完美的通过邮箱或者更加高级、暴力的方式去通知评论者,长话短说,不多废话,代码如下:

/*评论名称必须包含中文,评论邮箱,网址必填*/
Add_Filter_Plugin('Filter_Plugin_PostComment_Core', 'PostComment_Core');

function PostComment_Core(&$cmt) {
    global $zbp;

    // 获取 POST 请求中的 email, HomePage 和 username 参数
    $email = GetVars("email", "POST");
    $homepage = GetVars("HomePage", "POST");
    $username = GetVars("username", "POST");

    // 使用系统内置的 CheckRegExp 进行初步验证
    if (!CheckRegExp($email, '[email]')) {
        $cmt->IsThrow = true;
        $error_code_invalid_email = 16;  // 自定义的错误代码
        $zbp->lang['error'][$error_code_invalid_email] = '邮箱格式不正确';  // 错误提示信息
        $zbp->ShowError($error_code_invalid_email, __FILE__, __LINE__);  // 抛出错误
    }

    if (!CheckRegExp($homepage, '[homepage]')) {
        $cmt->IsThrow = true;
        $error_code_invalid_homepage = 17;  // 自定义的错误代码
        $zbp->lang['error'][$error_code_invalid_homepage] = '网址格式不正确';  // 错误提示信息
        $zbp->ShowError($error_code_invalid_homepage, __FILE__, __LINE__);  // 抛出错误
    }

    // 邮箱的正则表达式 - 更严格的正则
    $email_strict_pattern = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';

    // 主页的正则表达式 - 更严格的正则
    $homepage_strict_pattern = '/^https?:\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/.*)?$/';

    // 更严格的邮箱格式验证
    if (!preg_match($email_strict_pattern, $email)) {
        $cmt->IsThrow = true;
        $error_code_strict_email = 18;  // 自定义的错误代码
        $zbp->lang['error'][$error_code_strict_email] = '邮箱格式不符合更严格的要求,邮箱必须是能接受到频道通知的可用邮箱。';  // 错误提示信息
        $zbp->ShowError($error_code_strict_email, __FILE__, __LINE__);  // 抛出错误
    }

    // 更严格的主页格式验证
    if (!preg_match($homepage_strict_pattern, $homepage)) {
        $cmt->IsThrow = true;
        $error_code_strict_homepage = 19;  // 自定义的错误代码
        $zbp->lang['error'][$error_code_strict_homepage] = '网址格式不符合更严格的要求,网址例如:https://www.dao.js.cn/';  // 错误提示信息
        $zbp->ShowError($error_code_strict_homepage, __FILE__, __LINE__);  // 抛出错误
    }

    // 用户名的正则表达式 - 至少两个字符,且必须包含中文字符
    $username_pattern = '/^(?=.*[\x{4e00}-\x{9fa5}]).{2,}$/u';

    // 检查用户名是否满足条件:至少包含一个中文字符,并且长度不少于两个字符
    if (!preg_match($username_pattern, $username)) {
        $cmt->IsThrow = true;
        $error_code_invalid_username = 20;  // 自定义的错误代码
        $zbp->lang['error'][$error_code_invalid_username] = '用户名必须包含中文字符且不得少于两个字';  // 错误提示信息
        $zbp->ShowError($error_code_invalid_username, __FILE__, __LINE__);  // 抛出错误
    }

    // 其他逻辑处理,如成功后的进一步处理
}

这个代码很随意,可以直接插在主题的include.php的底部直接使用,我是使用的拓源主题,如果是其他主题或许提示的错误代码有所不同,诸君要慢慢摸索。另外隔壁老李也发布了这方面的文章。

https://yeelz.com/post/572.html

米表,www.dao.js.cn/mi
已有评论 (0)
提示:您必须 登录 才能查看此内容。
创建新帖
广告推广点击空位自助购买