为什么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
相关产品推荐
相关产品推荐

