我正在尝试在文本框中以特定格式显示从数据库中检索到的数字。有两种方式可以显示数字。
- 当总数为 10 时在数据库中 (4608061019) 预期输出 46-0806-1019
- 当总数为 13 时在数据库中 (4608061019100) 预期输出 46-0806-1019-100
到目前为止,我的进展:
将值保存到我正在使用的数据库中时preg_replace("/[^0-9]/",",$string);以确保在存储时删除所有硬编码的"-"。
一种可能的(使用正则表达式)方法:
$str = '4608061019';
$formatted = preg_replace(
'/(^'d{2}|'d{4})(?!$)/', '$1-', $str);
// 46-0806-1019
演示。此函数不检查字符串的长度 - 它只是在每个相关的符号序列后添加一个连字符(开头后面有 2 个,后面有 4 个)。
简单!如果您确定只有这两个选项,则可以这样做:
-
将数字转换为数字数组:
$number = str_split($number);
-
检查长度:
if (count($number) == 10) $number = $number[0] . $number[1] . "-" . $number[2] . $number[3] . $number[4] . $number[5] . "-" . $number[6] . $number[7] . $number[8] . $number[9]; else if (count($number) == 13) $number = $number[0] . $number[1] . "-" . $number[2] . $number[3] . $number[4] . $number[5] . "-" . $number[6] . $number[7] . $number[8] . $number[9] . "-" . $number[10] . $number[11] . $number[12];
-
返回数字:
return $number;
这里的完整功能:
function tokenize($number)
{
$number = str_split($number);
if (count($number) == 10)
$number = $number[0] . $number[1] . "-" . $number[2] . $number[3] . $number[4] . $number[5] . "-" . $number[6] . $number[7] . $number[8] . $number[9];
else if (count($number) == 13)
$number = $number[0] . $number[1] . "-" . $number[2] . $number[3] . $number[4] . $number[5] . "-" . $number[6] . $number[7] . $number[8] . $number[9] . "-" . $number[10] . $number[11] . $number[12];
return $number;
}
输出
echo tokenize(4608061019);
echo tokenize(4608061019100);
Output
46-0806-1019
46-0806-1019-100
小提琴:http://codepad.viper-7.com/EVWeFR
另一种替代解决方案:
$parts = array(2,4,4,3);
$string = "4608061019100";
$i = 0;
$newString = '';
foreach ($parts as $part) {
$newString.=substr($string, $i, $part) ."-";
$i = $i+$part;
}
$newString = rtrim($newString, "-");
输出为:
string '46-0806-1019-100' (length=16)
也适用于46-0806-1019
。
试试:
//$number = '4608061019';
$number = '4608061019100';
function formatImportantNumber($theNumber){
$formatedNumber = '';
if(strlen($theNumber)==10){
//46-0806-1019
$formatedNumber = substr($theNumber, 0, 2).'-'.substr($theNumber, 2, 4).'-'.substr($theNumber, 6, 4);
}elseif(strlen($theNumber)==13){
//46-0806-1019-100
$formatedNumber = substr($theNumber, 0, 2).'-'.substr($theNumber, 2, 4).'-'.substr($theNumber, 6, 4).'-'.substr($theNumber, 10, 3);
}else{
die('Invalid number formated')
}
return $formatedNumber;
}
echo formatImportantNumber($number);