我将把这归因于我的数学能力薄弱,因为我无法找到这个脚本的有效解决方案。极不可能是这些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 );