如何为WordPress WooCommerce注册自定义比特币地址字段添加正则验证
你可以直接修改原有wooc_validate_extra_register_fields校验函数,增加正则匹配逻辑即可,修改后的完整代码如下:
function wooc_validate_extra_register_fields( $username, $email, $validation_errors ) { // 原有非空校验逻辑 if ( isset( $_POST['billing_first_name'] ) && empty( $_POST['billing_first_name'] ) ) { $validation_errors->add( 'billing_first_name_error', __( 'Refund Address is required!', 'woocommerce' ) ); } // 新增比特币地址格式正则校验 elseif ( isset( $_POST['billing_first_name'] ) ) { // 先对提交内容做安全过滤 $btc_refund_address = sanitize_text_field( $_POST['billing_first_name'] ); // PHP正则需在外层添加分隔符,此处使用/作为分隔符 if ( ! preg_match( '/^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$/', $btc_refund_address ) ) { $validation_errors->add( 'billing_first_name_error', __( '请输入有效的比特币退款地址格式', 'woocommerce' ) ); } } return $validation_errors; } add_action( 'woocommerce_register_post', 'wooc_validate_extra_register_fields', 10, 3 );
改动说明
- 保留了原有的必填校验逻辑,保证退款地址字段不能为空
- 新增的校验逻辑中先对提交的字段值做了安全过滤,避免恶意内容注入风险
- 使用PHP内置
preg_match()函数执行正则匹配,地址格式不符合规则时抛出错误提示 - 给正则规则外层添加了PHP语法要求的
/分隔符,不会出现正则解析报错
额外注意
你当前借用了WooCommerce原生billing_first_name(账单姓名字段)存储比特币退款地址,如果后续需要使用原生账单信息功能,建议更换为独立的自定义字段名存储,避免数据冲突。
内容的提问来源于stack exchange,提问作者Nath
相关产品推荐
相关产品推荐

