【问题标题】:Class or function to format numbers using hash symbols使用哈希符号格式化数字的类或函数
【发布时间】:2012-03-27 09:04:07
【问题描述】:

根据另一个使用哈希符号、减号和空格的输入字符串格式化字符串的最简单方法是什么。

我有一个字符串,其中包含一个电话号码,可能看起来像这样(或其中有多个空格):

012-34567890

我有另一个字符串,其中包含数字必须转换为的格式,如下所示:

### - ## ## ##

## - ### ## ##

###-## ## ##

哈希位置必须在数字格式的前导。我似乎想不出有什么办法做到这一点......

在某些情况下(例如国际电话号码)必须使用 (, ) 和 + 符号。在这种情况下,转换字符串看起来像这样(例如)

+(##)-(#)##-## ## ##

有人有什么想法吗?

【问题讨论】:

    标签: php function class string-formatting phone-number


    【解决方案1】:
    $number = "012-34567890";
    $format1 = "### - ## ## ##";
    $format2 = "+(##)-(#)##-## ## ##";
    $format3 = "## - ### ## ####";
    $format4 = "###-## ## ####";
    
    function formatNumber($number, $format)
    {
        // get all digits in this telephone number
        if (!preg_match_all("~\w~", $number, $matches))
            return false;
    
        // index of next digit to replace #
        $current = 0;
    
        // walk though each character of $format and replace #
        for ($i = 0; $i < strlen($format); $i++)
            if ($format[$i] == "#")
            {
                if (!isset($matches[0][$current]))
                    // more # than numbers
                    return false;
    
                $format[$i] = $matches[0][$current++];
            }
    
        if (count($matches[0]) != $current)
            // more numbers than #
            return false;
    
        return $format;
    }
    
    var_dump(
        formatNumber($number, $format1),
        formatNumber($number, $format2),
        formatNumber($number, $format3),
        formatNumber($number, $format4)
    );
    

    输出

    boolean false
    
    string '+(01)-(2)34-56 78 90' (length=20)
    
    string '01 - 234 56 7890' (length=16)
    
    string '012-34 56 7890' (length=14)
    

    如果您的# 多于数字,您可以删除它们而不是使用函数return false。如果您的数字多于#,您也可以将它们附加到格式中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-21
      • 2015-07-26
      • 1970-01-01
      • 2015-03-09
      相关资源
      最近更新 更多