WooCommerce结账页面手机号按开头数字自定义长度验证需求
WooCommerce结账页面手机号自定义验证规则实现
需求说明
需要为结账页面的手机号字段添加以下验证规则:
- 以
02开头的手机号,长度最多为9位 - 以
08开头的手机号,长度最多为10位
修改后的代码
替换你现有的代码为以下内容:
add_action('woocommerce_checkout_process', 'njengah_custom_checkout_field_process'); function njengah_custom_checkout_field_process() { // 先检查手机号字段是否存在且不为空 if (isset($_POST['billing_phone']) && !empty($_POST['billing_phone'])) { $phone = sanitize_text_field($_POST['billing_phone']); // 验证规则:02开头最多9位 或 08开头最多10位 $valid_pattern = '/^(02\d{0,7}|08\d{0,8})$/'; if (!preg_match($valid_pattern, $phone)) { wc_add_notice('手机号格式错误:02开头请输入最多9位数字,08开头请输入最多10位数字', 'error'); } } }
代码说明
- 字段存在检查:先判断
billing_phone字段是否存在且不为空,避免无输入时触发错误提示 - 正则规则解析:
02\d{0,7}:匹配以02开头,后续跟0-7位数字(总长度2-9位)08\d{0,8}:匹配以08开头,后续跟0-8位数字(总长度2-10位)|表示两种规则满足其一即可通过验证
- 输入过滤:用
sanitize_text_field()处理输入内容,避免恶意字符干扰验证逻辑 - 明确错误提示:直接告知用户两种开头手机号的长度要求,降低用户理解成本
测试要点
- 验证通过场景:
021234567(9位)、0212345(7位)、0812345678(10位)、0812345(7位) - 验证失败场景:
0212345678(10位)、08123456789(11位)、0312345678(非02/08开头)、包含字母/符号的手机号
内容的提问来源于stack exchange,提问作者web Editor
相关产品推荐
相关产品推荐

