PHP中奇怪的空白错误

时间:2014-10-31 21:08:32

标签: php str-replace trim

我有要格式化的电话号码

我有一个模式匹配器,将数字分解为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

当它通过$ trimmed运行时,我输出$ tendigit ...它输出

  40350100 

正如所料。但是当我将$ num应用于它时。它可以追溯到

 4-035-0100

我至少会期待它是

 403-501-00

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

任何想法??

由于

2 个答案:

答案 0 :(得分:0)

您可以稍微压缩一下代码:

$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位数。

如果是,则使用您的代码进行解析和格式化。

如果没有,那么你可以发现错误。

答案 1 :(得分:0)

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

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