0

我正在尝试使插入数据库的电话号码都遵循相同的约定,无论它们是如何插入的。

所以(123) 456.7890123.456.7890

最终都会进入数据库123-456-7890

我认为必须有一个函数可以让我删除所有非整数字符,以便123.456.7890可以将其转换为1234567890然后重新格式化为xxx-xxx-xxxx

也许我对此错了,但我认为 php 必须有一种方法来完成这些方面的事情,所以任何帮助都将不胜感激。

4

4 回答 4

1
// Remove any non-number character
$str = preg_replace('/[^\d]/', '', $str);
// Insert dashes
$str = preg_replace('/(\d)(?=(\d{4}|\d{7})$)/', '$1-', $str);

这是小提琴:http ://codepad.viper-7.com/pQlwVw

于 2013-02-01T18:27:12.743 回答
1

只需一个简单的正则表达式就可以做到:

$nums = preg_replace("/\D/","",$input);

理想情况下,您应该将其保存为该格式,并且仅在输出中对其进行格式化,如下所示:

$output = preg_replace("/(...)(...)(....)/","$1-$2-$3",$nums);
于 2013-02-01T18:27:47.407 回答
1

像这样的东西会起作用(从How do you format a 10 digit string into a phone number? 偷来的?

$phone = preg_replace("/[^0-9]/", "", $phone);
echo "(".substr($phone, 0, 3).") ".substr($phone, 3, 3)."-".substr($phone,6);
于 2013-02-01T18:27:55.713 回答
1

这是 7 位或 10 位数字的正则表达式,允许扩展,分隔符是空格、破折号或句点:

^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$

或者您可以使用大锤方法:只需删除任何非数字和格式的内容即可。

于 2013-02-01T18:28:28.113 回答