if()语句中substr()和strpos()的比较出现逻辑错误



我将把这归因于我的数学能力薄弱,因为我无法找到这个脚本的有效解决方案。极不可能是这些php函数中的错误。

如果$value字符串的前五个字符在$master字符串中不匹配,则表单应仅每次验证并允许提交。绕圈子试图让它正常工作。提前感谢您的任何提示或建议。

示例1:

Joey ($value)
Joey123 ($master) 

在上面的实例中,表单不应验证字符串中的前0-5个字符是否匹配但是,上面的例子允许表单进行验证。

示例2:

Joey ($value)
Joey ($master) 

在上面的实例中,表单返回false并且无效。正如预期的那样,弹出错误的验证消息。

我认为问题在于对$result['is_valid']的第一次if((检查,所以我正在运行各种测试,无论是否使用这个初始语句。

add_filter('gform_field_validation_1_4', function ( $result, $value, $form, $field ) {
$value = substr($value, 0, 5);
$master = substr(rgpost('input_5'), 0, 5);
if ($result['is_valid'] && strpos($value, $master) !== false) {
$result['is_valid'] = false;
$result['message']  = 'If you are having trouble submitting this form, please call us directly.';
}
echo 'Master: ' . $master;
echo 'Value: ' . $value;

return $result;
}, 10, 4 );

我认为您需要反转strpos中的params,如下所示:

// change this
strpos($value, $master)
// to this
strpos($master, $value)

根据php文档,顺序是";干草堆";那么";"针":https://www.php.net/manual/en/function.strpos.php

好吧,我相信我已经尽了最大努力,但它似乎确实如预期的那样工作(尽管如果名字和姓氏的前5个字符相同,可能会有一些缺点(。我使用了str_contains()函数(php8(,然后检查了任何长度的相同匹配,因为这是两种主要类型的垃圾邮件,垃圾邮件现在已经停止了!

感谢mikerojas让我走上了修复我最初有缺陷代码的正确轨道。

add_filter('gform_field_validation_1_4', function ( $result, $value, $form, $field ) {

//$haystack = substr(rgpost('input_5'), 0,5);
//$value = substr($value, 0,5);
$haystack = rgpost('input_5');
$value = substr($value, 0,5);

if ($result['is_valid'] && str_contains($haystack, $value) == !false or $result['is_valid'] && $haystack == $value) {
$result['is_valid'] = false;
$result['message']  = 'If you are having trouble submitting this form, please call us directly.';
}
echo 'Haystack: ' . $haystack;
echo 'Value: ' . $value; 
return $result; }, 10, 4 );

相关内容

  • 没有找到相关文章

最新更新