鸣谢@隔壁老李、@拓源网、@沉冰浮水、@豫唐网络四位大佬的思路及技术支撑,使得小道又学会了一个巧妙地姿势。
缘起啊,说来话长。有位道友找小道换友链,结果在写评论的时候,居然邮箱、主页什么的全都没填,小道一看,无法通知他,心中愤愤不平,真是气得七窍生烟。于是我,修道的老李,心里想着,不能再让这种事发生了,决定尝试搞个Z-Blog评论强制填写邮箱、网址的功能。更妙的是,用户名还得带两个以上的中文字符,岂能随意。说实话,起初我在拓源主题的Z-Blog群里有些忐忑,毕竟小道对Z-Blog的那些钩子、机制也不甚了了,早已忘得七七八八,心里多少有点不好意思开口。不过转念一想,不问又如何能进步?那不成了道途上的障碍?其实隔壁的老李,那才是真有悟性,写代码时下笔如有神助,一写一个准,我看了也是心生佩服。虽说修道有成,我在这编程之道上,还得多向那老李请教一二啊。
于是,我根据隔壁老李和沉冰浮水提供的思路,巧妙地写下了下面的代码,主要是几个功能,一是邮箱必填和网址必填,而且是完全需要填写正确的内容,否则正则判断后不正确,你还得重新填写对应内容;二是用户名必须不少于两个字符,且需要包含中文,否则正则不通过,依旧要重填。这样一来,我如果回复了用户的评论后,就可以完美的通过邮箱或者更加高级、暴力的方式去通知评论者,长话短说,不多废话,代码如下:
/*评论名称必须包含中文,评论邮箱,网址必填*/
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