Php 电子商务结账时的最低电话号码

Php 电子商务结账时的最低电话号码,php,regex,wordpress,woocommerce,phone-number,Php,Regex,Wordpress,Woocommerce,Phone Number,我希望用户在Woocommerce收银台中输入至少7个电话号码。下面的函数可以工作,但它包含空格,所以如果用户用1个空格输入6个数字,则将其计为7。如何更改函数,使其只计算数字而不计算空格,以便用户必须输入至少7个数字 // validation for Billing Phone checkout field add_action('woocommerce_checkout_process', 'custom_validate_billing_phone'); function custom_

我希望用户在Woocommerce收银台中输入至少7个电话号码。下面的函数可以工作,但它包含空格,所以如果用户用1个空格输入6个数字,则将其计为7。如何更改函数,使其只计算数字而不计算空格,以便用户必须输入至少7个数字

// validation for Billing Phone checkout field
add_action('woocommerce_checkout_process', 'custom_validate_billing_phone');
function custom_validate_billing_phone() {
    $is_correct = preg_match('/^[0-9 \-]{7}/i', $_POST['billing_phone']);
    if ( $_POST['billing_phone'] && !$is_correct) {
        wc_add_notice( __( 'Phone Number must be <strong>minimum 7 numbers</strong>.' ), 'error' );
    }
}
//计费电话签出字段的验证
添加操作('woocommerce\u checkout\u process','custom\u validate\u billing\u phone');
功能自定义\验证\计费\电话(){
$is_correct=preg_match('/^[0-9\-]{7}/i',$_POST['billing_phone']);
如果($\u POST['billing\u phone']&&&!$正确){
wc_添加_通知(uuu('Phone Number必须是至少7个号码,),'error');
}
}

Change
preg\u将
行与此行匹配:

$is_correct = preg_match('/^[0-9\-]{7}/i', $_POST['billing_phone']);

那应该行。

我想出了解决办法

$is_correct = preg_match('/^[0-9\D]{7}/i', $_POST['billing_phone']);

您可以使用以下正则表达式。它只计算数字:

^(?:\D*?\d\D*?){7}$
它从字符串的开头开始,然后创建一个匹配的非捕获组 可选任意数量的非数字、数字和可选任意数量的非数字。这就需要7个

这意味着,它只对数字进行计数,而忽略计数中的非数字

匹配示例:

1234567
1 23 45 67
123-4567
不匹配的示例:

123 456
12-34-56-78

谢谢,不幸的是,如果我添加7个数字,中间有空格,则会出现错误通知。如果它们之间是一个空格,则需要允许7个数字,因为即使有空格,它也应至少为7个。请首先尝试对经过计算的字符串$str=preg_replace('/\s+/','',$_POST['billing_phone'])执行此操作;然后使用上面的preg_匹配计算$str。这将在验证之前删除字段中的所有空白。这仍然会将空格计为七个字符之一。