在 PHP 中格式化字符串


Formatting String in PHP

我正在尝试在文本框中以特定格式显示从数据库中检索到的数字。有两种方式可以显示数字。

  • 当总数为 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 个)。

简单!如果您确定只有这两个选项,则可以这样做:

  1. 将数字转换为数字数组:

    $number = str_split($number);
    
  2. 检查长度:

    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];
    
  3. 返回数字:

    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);