我有要格式化的电话号码
我有一个模式匹配器,将数字分解为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没有攻击。
任何想法??
由于
答案 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);