0

我是 PHP 新手,所以,如果这是一个简单的问题,请原谅我,但我真的不知道如何使用preg_replace从我的电话号码中的区号中去除括号并在区号之间添加破折号和前 3 位数字。

现在我所有的电话号码都以这种格式分别存储在每个人数组(在索引文件中)中:(800) 111-1111.

我想让它们像这样打印出来:800-111-1111我想让这一切都发生在setphoneNumber我的Person课堂上。

代码如下所示:

$this-> phoneNumber = $phoneNumber;  
$pattern = ('/\D+/');
$replacement = '';
if(is_string($phoneNumber)) {
    return preg_replace($pattern, $replacement, $this -> phoneNumber);
} else {
    user_error("Error: Person's phone number must be a string");
} 

我对它所做的任何修改要么在偏移错误处给我一个不匹配的括号,要么给我一个无结尾分隔符错误(当我设置为时发生$pattern(')'

任何帮助将不胜感激。

谢谢大家!

4

2 回答 2

0

如果初始格式始终相同,我不会费心为替换或模式定义变量

尝试这个:

preg_replace(array("(",") "),"", $this->phoneNumber);
于 2012-09-29T21:02:25.023 回答
0

这样的事情怎么样,布赖恩?

$pattern = array('/\(/', '/\) /');
$replacement = array('', '-');
if(is_string($phoneNumber)) {
return preg_replace($pattern, $replacement, $this -> phoneNumber);
}

它并没有考虑到人们使用句点代替连字符(如 800.111.1111)......但它也不需要更多的时间来让它发挥作用。您只想删除所有多余的部分,然后确保将第一个句点(在区号和下一个数字块之间)替换为空格而不是连字符,就像对剩余句点所做的那样。

更新:

我没有对此进行过广泛的测试,但这应该适用于您所追求的,以及适应使用十进制电话号码格式(即 800.111.1111)的人。

$pattern = array('/ /','/[(](.*)[)](.*)(-)(.*)/','/(.*)(\.)(.*)(\.)(.*)/');
$replacement = array('','$1-$2-$4','$1-$3-$5');
if(is_string($phoneNumber)) {
return preg_replace($pattern, $replacement, $this -> phoneNumber);
}
于 2012-09-29T22:40:23.300 回答