Php 格式化电话号码
为了获得一个标准化的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
+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插件将所有这些电话号码转换成一种小部件。你有什么问题?您是否正在寻找表示电话号码的标准(回答:)?将字符串转换为另一个字符串时,您是否在使用正则表达式?你在寻找一个算法吗?我确实在寻找一个算法来转换这些不同的