不使用分隔符拆分数据


Split data without delimiter?

假设我的电话号码存储在我的表中为:

"0008675309"

显然我不想这样显示它,我想在调用它时将其格式化为:

(000) 867 - 5309

是否使用/-或之类的分隔符将其存储在数据库中更好。这样我就可以分了?还是可以按字符数来划分?

处理任何一种格式的电话号码的性能成本和代码都很简单,因此实际上取决于您的偏好。要回答您的问题,很容易获取前三个字符,后面三个字符和最后四个字符,例如使用substr函数。

这是你想要的:

$phone = preg_replace('^('d{3})('d{3})('d{4})$', '($1)$2-$3', $phone);

作为额外的奖励,如果输入格式不匹配(国际号码),将不会更改格式。

如果您只存储北美的电话号码(10位数字),那么正如@mellamokb所指出的,无论哪种方式都可以。如果您可能要存储国际号码,您应该尽早捕获尽可能多的细节(如果可能的话),因为以后可能很难知道如何加标点符号。

使用preg_split with PREG_SPLIT_NO_EMPTY

其他答案完全正确。如果您想要它的实际代码,我认为下面的代码应该可以解决这个问题(索引可能有一个错误!):

$phone_number="0008675309"
$phone_number=substr_replace($phone_number, "(", 0, 0);
$phone_number=substr_replace($phone_number, ")", 4, 0);
$phone_number=substr_replace($phone_number, "-", 8, 0);