PHP中出现奇怪的空白错误


Weird whitespace error in PHP

我有要格式化的电话号码

我有一个模式匹配器,它将数字分解为10位数的格式,然后应用破折号。它大部分时间都有效。但是我对某些数字有意见。

$trimmed = trim(preg_replace('/'s+/', '', $v->cust_num));
$tendigit = str_replace(array( '(', ')','-',' ' ), '', $trimmed);
$num = substr($tendigit,0,3)."-".substr($tendigit,3,3)."-".substr($tendigit,6,4);

这将更改(555)555 5555,或555-555 5555或5555555555或(555)-555-5555或555-555-5555到我的555-555-5555 格式

然而,我在数据库中发现了一些条目,这些条目似乎不想更改。

其中一个不好的条目就是这个。它在4前面包含两个空格。

   4-035-0100

当它运行到$tried时,我输出$tendigit。。。它输出

  40350100 

正如预期的那样。但当我将$num应用于它时,它会返回

 4-035-0100

我至少希望它是

 403-501-00

它似乎有一些隐藏的空白,我的preg_replace、trim和str_replace没有攻击性。

有什么想法吗??

感谢

下面的代码是有效的,我已经用我们在注释中发现的特殊字符进行了尝试。基本上,正则表达式删除所有不是数字(0-9)的内容,然后使用原始格式。

$trimmed = preg_replace('/'D+/', '', $v->cust_num);
$num = substr($trimmed,0,3)."-".substr($trimmed,3,3)."-".substr($trimmed,6,4);

您可以稍微压缩代码:

$tendigit = preg_replace('/[^'d]/', '', $v->cust_num);
$num = substr($tendigit,0,3)."-".substr($tendigit,3,3)."-".substr($tendigit,6,4);

不过,你应该添加一些条件来检查电话号码是否也有10位数字:

$tendigit = preg_replace('/[^'d]/', '', $v->cust_num);
if(strlen($tendigit == 10)){
    $num = substr($tendigit,0,3)."-".substr($tendigit,3,3)."-".substr($tendigit,6,4);
} else {
    // catch your error here, eg 'please enter 10 digits'
}

第一行删除任何"非数字"[^''d]。

条件语句检查$tendigit变量中是否有10位数字。

如果是这样,那么它将使用您的代码进行解析和格式化。

如果没有,那么你可能会发现一个错误。