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

Elementor Pro表单邮政编码验证:91/92开头代码实现及防垃圾疑问

Elementor Pro 表单邮政编码特定开头验证实现

一、调整代码实现91/92开头的邮政编码验证

你找到的代码是自定义字段的验证模板,只需修改核心验证逻辑,就能实现指定开头的邮政编码校验。下面提供两种可行方案:

方案1:自定义邮政编码字段(适合需要单独字段类型的场景)

直接修改原代码的验证逻辑,补充自定义字段必需的基础方法,完整代码如下:

class Elementor_Postcode_Field extends \ElementorPro\Modules\Forms\Fields\Field_Base {

    public function validation( $field, $record, $ajax_handler ) {
        // 空值不验证(若字段设为必填,Elementor会自动处理空值提示)
        if ( empty( $field['value'] ) ) {
            return;
        }

        // 正则匹配以91或92开头的邮政编码
        $postcode = trim( $field['value'] );
        if ( ! preg_match( '/^9[12]/', $postcode ) ) {
            $ajax_handler->add_error(
                $field['id'],
                esc_html__( '请输入以91或92开头的邮政编码。', 'textdomain' )
            );
        }
    }

    // 自定义字段必须实现的基础方法
    public function get_type() {
        return 'custom-postcode';
    }

    public function get_name() {
        return esc_html__( '自定义邮政编码', 'textdomain' );
    }

    public function render( $item, $item_index, $form ) {
        // 渲染和默认字段一致的输入框
        ?>
        <input type="text" name="<?php echo $this->get_attribute_name( $item, $item_index ); ?>" class="elementor-field-textual" placeholder="<?php echo esc_attr( $item['placeholder'] ); ?>">
        <?php
    }
}

// 注册自定义字段到Elementor表单
add_action( 'elementor_pro/forms/fields/register', function() {
    \ElementorPro\Modules\Forms\Fields\Fields_Manager::register_field_type( 'Elementor_Postcode_Field' );
} );

方案2:给现有字段加验证(更简单,无需自定义字段)

如果不想新增字段类型,直接给已有的邮政编码字段加后端验证,只需替换代码中的字段ID即可:

add_action( 'elementor_pro/forms/validation', function( $record, $ajax_handler ) {
    $fields = $record->get( 'fields' );
    
    // 替换为你表单中邮政编码字段的实际ID(在Elementor编辑器的字段设置中查看)
    $target_field_id = 'postcode';
    if ( isset( $fields[ $target_field_id ] ) ) {
        $postcode = trim( $fields[ $target_field_id ]['value'] );
        if ( ! empty( $postcode ) && ! preg_match( '/^9[12]/', $postcode ) ) {
            $ajax_handler->add_error( $target_field_id, esc_html__( '请输入以91或92开头的邮政编码。', 'textdomain' ) );
        }
    }
}, 10, 2 );

二、验证规则对垃圾机器人的可见性说明

  • 前端验证:Elementor表单的前端校验逻辑会通过JS执行,这部分规则可以在页面源码中被查看到,垃圾机器人若能解析JS,可能绕过前端验证。
  • 后端验证:上面两种方案的核心验证逻辑都是在服务器端执行的,这部分代码完全隐藏在服务器内部,机器人无法通过前端源码获取,是拦截垃圾信息的可靠屏障。

建议:务必保留后端验证,同时配合Elementor表单的reCAPTCHA功能,进一步提升垃圾信息拦截效果。

内容的提问来源于stack exchange,提问作者Freddy T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:53:10