Php 格式化电话号码

Php 格式化电话号码,php,formatting,Php,Formatting,为了获得一个标准化的php函数,我想将用户输入的字符串格式化为标准国际电话号码格式。 字符串将从其他字符中剥离为数字和+-符号。所有空间都将被删除。 之后,我想将不同的字符串格式化为标准格式: +310612345678 -> +31 (0)61 234 5678 00310612345678 -> +31 (0)61 234 5678 +31612345678 -> +31 (0)61 234 5678 //add a leading zero between b

为了获得一个标准化的php函数,我想将用户输入的字符串格式化为标准国际电话号码格式。 字符串将从其他字符中剥离为数字和+-符号。所有空间都将被删除。 之后,我想将不同的字符串格式化为标准格式:

+310612345678  -> +31 (0)61 234 5678
00310612345678  -> +31 (0)61 234 5678

+31612345678   -> +31 (0)61 234 5678 
//add a leading zero between brackets (0))
0031612345678  -> +31 (0)61 234 5678

06 12345678   -> +31 (0)61 234 5678 
//When no country code is given (no 00xx or +xx) than add the dutch one.
这是我准备好的函数:

function formatPhoneNumber($num){
 //delete everything except digits and +
  $number = preg_replace('/[^\d|\+]/', '', $number);

 if(substr($number,0,1) == '+' || substr($number, 0,2) == 00){
  //
 }else{
  $number = "+31".$number;
 }

 /////////
 // formatting as mentioned above
 /////////


 return $num
}

我正在寻找一种算法,将用户输入的电话号码的不同方式格式化为一种格式:+31(0)61 2345678

除了在国家代码前加前缀之外,我不确定是否还有其他国际标准。有关国际电话号码格式的示例,请参阅。格式将根据国家和类型而变化

e、 g.在英国,固定电话为+44(0)20 1234 1234,手机为+44(0)7700 123456


因此,如果您想正确地执行此操作,我认为您需要识别国家代码,然后插入特定于国家/地区的格式化程序。

除了在国家/地区代码前面加前缀之外,我不确定是否还有其他国际标准。有关国际电话号码格式的示例,请参阅。格式将根据国家和类型而变化

e、 g.在英国,固定电话为+44(0)20 1234 1234,手机为+44(0)7700 123456


因此,如果您想正确地执行此操作,我认为您需要识别国家代码,然后插入特定于国家/地区的格式化程序。

我目前没有最终的解决方案,但如果您不想只分析荷兰数字,我想指出一些困难:

  • 您必须知道所有国际前缀(有些是一位数字,如北美1+1,有些是两位数字,如荷兰1+31,有些是三位数字,如捷克1+420),如果国家代码和区号之间没有空格,则无法简单地确定格式中空格的正确位置

  • 此外,您不能自动假定区号中的前导零是多余的。在一些国家,如意大利,即使在国际通话中也必须使用前导零。E如果你想从荷兰拨打米兰号码02 123456,你必须拨打+39 02 123456而不是+39 2 123456

所以,这不仅仅是关于编写一个简短的格式化算法,而是关于理解不同国家的不同数字格式和用法


当然,您可以将荷兰语号码(我假设您完全了解并理解荷兰语电话号码格式)转换为所描述的格式,只需删除所有类型的空格,并将前导的“00”替换为“+”即可转换所有外来号码--如果你不想快速而肮脏的解决方案,你有很多工作要做。

我目前没有最终的解决方案,但如果你不想只分析荷兰数字,我想指出一些困难:

  • 您必须知道所有国际前缀(有些是一位数字,如北美1+1,有些是两位数字,如荷兰1+31,有些是三位数字,如捷克1+420),如果国家代码和区号之间没有空格,则无法简单地确定格式中空格的正确位置

  • 此外,您不能自动假定区号中的前导零是多余的。在一些国家,如意大利,即使在国际通话中也必须使用前导零。E如果你想从荷兰拨打米兰号码02 123456,你必须拨打+39 02 123456而不是+39 2 123456

所以,这不仅仅是关于编写一个简短的格式化算法,而是关于理解不同国家的不同数字格式和用法


当然,您可以将荷兰电话号码(我想您完全了解荷兰电话号码格式)转换为所描述的格式,只需删除所有类型的空白并将前导的“00”替换为“+”——如果您不想快速而肮脏的解决方案,您还有很多工作要做。

这很有趣,因为在荷兰,荷兰手机号码(均以06开头)的格式不是标准化的


您可能应该编写这个测试驱动的。有很多有趣的案例,你会想涵盖,这样你至少可以显示你做什么和你不转换

这很有趣,因为在荷兰,荷兰手机号码(都以06开头)的格式不是标准化的


您可能应该编写这个测试驱动的。有很多有趣的案例,你会想涵盖,这样你至少可以显示你做什么和你不转换

您可以使用此功能:

函数maskPhoneNumber(num,mask){
让正则表达式=“”
设i=0
常量格式=掩码。替换(/(#+)/g,(匹配)=>{
正则表达式+=`([\+\\d]{${match.length})`
我++
返回`${i}`
})
return num.replace(新的RegExp(regex),格式).substr(0,mask.length)
}
console.error(maskPhoneNumber(“+310612345678”,“###############”)错误)

//“+31(0)61 234 5678”
您可以使用此功能:

函数maskPhoneNumber(num,mask){
让正则表达式=“”
设i=0
常量格式=掩码。替换(/(#+)/g,(匹配)=>{
正则表达式+=`([\+\\d]{${match.length})`
我++
返回`${i}`
})
return num.replace(新的RegExp(regex),格式).substr(0,mask.length)
}
console.error(maskPhoneNumber(“+310612345678”,“###############”)错误)

//“+31(0)61 234 5678”
有点滑稽,skype firefox插件将所有这些电话号码转换成一种小部件。你有什么问题?您是否正在寻找表示电话号码的标准(回答:)?将字符串转换为另一个字符串时,您是否在使用正则表达式?你在寻找一个算法吗?我确实在寻找一个算法来转换这些不同的