如何使用PHP规范化SQL列中的电话号码?

如何使用PHP规范化SQL列中的电话号码?,php,mysql,sql,Php,Mysql,Sql,我在SQL数据库中有一个表,其中有一个电话号码列,其中包含很多号码。数字如下所示: 350-564-3210 350.564.3210 (350)564-3210 这些数字没有标准化。我希望使用如下格式进行规范化: +13505643210 它包括+1作为国家代码的前缀。在数组中存储特殊字符。执行字符串替换并连接+1。 试试下面的方法 $string = "350-564.3210"; $arrayString = array('-', '.', ')', '(', ' '); $result

我在SQL数据库中有一个表,其中有一个电话号码列,其中包含很多号码。数字如下所示:

350-564-3210
350.564.3210
(350)564-3210

这些数字没有标准化。我希望使用如下格式进行规范化:

+13505643210


它包括+1作为国家代码的前缀。

在数组中存储特殊字符。执行字符串替换并连接+1。 试试下面的方法

$string = "350-564.3210";
$arrayString = array('-', '.', ')', '(', ' ');
$result = str_replace($arrayString, '', $string);
print_r('+1'.$result);

首先让我们看看你的任何疑问, 就我而言,你所说的正常化是什么意思

你需要一个函数- 替换您的特殊字符,然后在字符串左侧追加+1

你可以这样替换和压缩

select concat('+1',replace('350-564-3210','-',''))
但是对于一个电话号码,你需要做一个泛化函数

但是仍然要检查这个-

尝试使用REGEXP\u REPLACE()


使用替换功能。将“.”、“-”、“(”、“)”替换为“”。并在它前面加上+1。在这方面做一些深入的研究小心尝试自动化这一点。如果“非标准化”意味着“它们都是十位数的美国电话号码,没有国家代码,但标点符号不同”,那么删除非数字字符并在+1前加上前缀就行了(请注意,到目前为止,这里提供的解决方案都没有做到这一点;除非您完全确定需要删除的字符子集,否则请查看regex replace)。对于任何其他情况,这些都不会对您有所帮助;众所周知,电话号码很难正常化。@Kungpu国家前缀正常化始终为00,因此我使用“意见”,因为在替换之前,+1不可能从列中选择所有号码?请参阅@fa06 answer,
replace()
具有多个
replace();
内部和
REGEXP\u replace()
?@Ivan其正则表达式replace yes可能不是dieference,但它非常有用,而不是使用多个replace函数。但它仅适用于mysql 8.0+大多数网站使用mysql 5.6+,包括wordpress站点,因此您的答案似乎很有用,因为我不想在这里发布答案(我怀疑这种情况的现实对于这种方法来说是否足够简单),为什么不替换所有非数字数字呢+或PHP的正则表达式引擎支持的任何格式在这里都更合适。是的,这可能是另一个选项@kungpusee@Kedar Limaye回答,使用多个
replace();
内部和
REGEXP_replace()
之间的性能差异是什么?
SELECT concat('+1',REGEXP_REPLACE('(350).564.3210','[-.()]','',1,0))