You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Contact Form 7自定义验证会禁止可选字段留空?

问题原因

当前tussenvoegsel字段的验证逻辑未判断输入是否为空,你使用的正则/^[a-zA-Z0-9]+$/要求至少存在1位字母/数字,空字符串无法匹配该规则,因此留空时也会触发校验报错。

修改方案

你只需要在tussenvoegsel字段的验证分支中,增加「输入内容非空才触发校验」的判断即可,修改后的完整代码如下:

// VALIDATIE INPUT FIELDS (GEEN CIJFERS MOGELIJK ALS INPUT)
add_filter( 'wpcf7_validate_text', 'alphanumeric_validation_filter', 20, 2 );
add_filter( 'wpcf7_validate_text*', 'alphanumeric_validation_filter', 20, 2 );

function alphanumeric_validation_filter( $result, $tag ) {
    $tag = new WPCF7_Shortcode( $tag );
    
    if ( 'familienaam' == $tag->name ) {
        $name_of_the_input = isset( $_POST['familienaam'] ) ? trim( $_POST['familienaam'] ) : '';
        
        if ( !preg_match('/^[a-zA-Z0-9]+$/',$name_of_the_input) ) {
            $result->invalidate( $tag, "Alleen letters zijn toegestaan." );
        }
    }
    
    if ( 'tussenvoegsel' == $tag->name ) {
        $name_of_the_input = isset( $_POST['tussenvoegsel'] ) ? trim( $_POST['tussenvoegsel'] ) : '';
        
        // 仅当输入内容非空时才触发校验
        if ( !empty($name_of_the_input) && !preg_match('/^[a-zA-Z0-9]+$/',$name_of_the_input) ) {
            $result->invalidate( $tag, "Alleen letters zijn toegestaan." );
        }
    }
    
    return $result;
}

修改说明

  • 给tussenvoegsel的验证条件新增了!empty($name_of_the_input)判断,当字段留空trim后为空值时,不会触发后续的正则校验,保留了字段的可选属性
  • 当用户有输入内容时,还是会执行原有的字母数字校验规则,符合需求

内容的提问来源于stack exchange,提问作者Remy Konings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:54:07