联系表格7正则表达式验证

时间:2017-07-25 18:10:32

标签: 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;
}

2 个答案:

答案 0 :(得分:3)

所以我认为我们需要首先考虑的是你的5 th 和6 th 。根据{{​​3}},$tag参数实际上返回一个对象而不是一个数组。

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

要解决的第二件事是你的正则表达式,现在是阅读CF7 documentation的好时机。基本上,简而言之,如果标准是MixedAlpha和破折号,则有许多姓氏不匹配。

但是,如果您打算削减一部分潜在用户,我建议您使用Falsehoods Programmers Believe about Names上列出的maček基本正则表达式,因为它至少包括一些更有潜力的有效姓氏。

这会把你的功能变成这样的东西:

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;
}

答案 1 :(得分:1)

尝试否定它

if(preg_match('/[^a-z\-]/i', $value)){

我还更新了它以使用/i,这将忽略大小写