wordpress - 联系表 7 正则表达式验证

标签 wordpress contact-form-7

我正在尝试将正则表达式验证添加到联系表 7 的“姓氏”字段,该字段将允许使用带连字符的名称。我已经研究并编写了一个函数来实现这一点,但它似乎不起作用。任何帮助,将不胜感激。

这是我编写并放置在functions.php文件中的函数...

add_filter('wpcf7_validate_text', 'custom_text_validation', 20, 2);
add_filter('wpcf7_validate_text*', 'custom_text_validation', 20, 2);

function custom_text_validation($result, $tag) {
    $type = $tag['type'];
    $name = $tag['name'];

    if($name == 'last-name') {
        $value = $_POST[$name];
        if(!preg_match('[a-zA-Z\-]', $value)){
            $result->invalidate($tag, "Invalid characters");
        }
    }
    return $result;
}

最佳答案

所以我认为我们首先需要查看的是您的第 5 行和第 6 行。根据CF7 documentation , $tag参数实际上返回一个对象而不是数组。

这意味着 $tag['name']$tag['type']实际上应该是 $tag->name$tag->type .

要解决的第二件事是您的正则表达式,现在是阅读 Falsehoods Programmers Believe about Names 的好时机。 .基本上,简而言之,如果标准是 MixedAlpha 和一个破折号,那么有很多姓氏将不匹配。

但是,如果您打算削减一部分潜在用户,我是否建议您使用 maček的基本正则表达式列于 this SO answer因为它至少会包含更多潜在的有效姓氏。

这会将您的功能变成这样的:

add_filter('wpcf7_validate_text', 'custom_text_validation', 20, 2);
add_filter('wpcf7_validate_text*', 'custom_text_validation', 20, 2);

function custom_text_validation($result, $tag) {
    $type = $tag->type; //object instead of array
    $name = $tag->name; //object instead of array

    if($name == 'last-name') {
        $value = $_POST[$name];
        if(!preg_match("/^[a-z ,.'-]+$/i", $value )){ //new regex statement
            $result->invalidate($tag, "Invalid characters");
        }
    }
    return $result;
}

关于wordpress - 联系表 7 正则表达式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45310756/

相关文章:

wordpress - 如何为自定义帖子和分类法制作 WordPress 存档页面?

css - 在 Elementor 中使用 Contact Form 7 但无法正确对齐文本框

wordpress - 将 http header 添加到 wordpress

PHP MySQL Wordpress 菜单

javascript - Masonry 设置不影响 WP 后循环输出

javascript - 将变量从 WordPress Contact Form 7 提交发送到成功页面

html - Contact form 7文件输入按钮设计

javascript - 联系表 7 重定向代码不重定向

wordpress - 尝试获取联系表单 7 发布数据以调试到屏幕

html - 元素符号未出现在 wordpress 网站中