我正在尝试一种方法,无论插入到数据库中的电话号码如何插入,都遵循相同的约定。
如此(123) 456.7890
和123.456.7890
最终都会以123-456-7890
的形式进入数据库
我认为必须有一个函数可以让我去除所有非整数字符,以便123.456.7890
可以转换为1234567890
然后将其重新格式化为xxx-xxx-xxxx
也许我错了,但我认为 php 必须有一种方法来完成这些事情,因此任何帮助将不胜感激。
// 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
只需一个微不足道的正则表达式就可以做到:
$nums = preg_replace("/D/","",$input);
理想情况下,您应该将其保存为该格式,并且仅在输出中格式化它,这将像这样完成:
$output = preg_replace("/(...)(...)(....)/","$1-$2-$3",$nums);
的东西会起作用(从 如何将 10 位字符串格式化为电话号码?
$phone = preg_replace("/[^0-9]/", "", $phone);
echo "(".substr($phone, 0, 3).") ".substr($phone, 3, 3)."-".substr($phone,6);
下面是一个 7 位或 10 位数字的正则表达式,允许使用扩展名,分隔符是空格、破折号或句点:
^(?:(?:+?1s*(?:[.-]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+))?$
或者你可以使用大锤方法:去掉任何非数字的东西,并按照你心满意足的格式。