我正在尝试使插入数据库的电话号码都遵循相同的约定,无论它们是如何插入的。
所以(123) 456.7890
和123.456.7890
最终都会进入数据库123-456-7890
我认为必须有一个函数可以让我删除所有非整数字符,以便123.456.7890
可以将其转换为1234567890
然后重新格式化为xxx-xxx-xxxx
也许我对此错了,但我认为 php 必须有一种方法来完成这些方面的事情,所以任何帮助都将不胜感激。
我正在尝试使插入数据库的电话号码都遵循相同的约定,无论它们是如何插入的。
所以(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);
只需一个简单的正则表达式就可以做到:
$nums = preg_replace("/\D/","",$input);
理想情况下,您应该将其保存为该格式,并且仅在输出中对其进行格式化,如下所示:
$output = preg_replace("/(...)(...)(....)/","$1-$2-$3",$nums);
像这样的东西会起作用(从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);
这是 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+))?$
或者您可以使用大锤方法:只需删除任何非数字和格式的内容即可。