根据使用散列符号,减号和空格的另一个输入字符串格式化字符串的最简单方法是什么。
我所拥有的是一个字符串,其中包含可能看起来像这样的电话号码(或其中有多个空格):
012-34567890
我有另一个字符串,其中包含数字必须转换为的格式,如下所示:
### - ## ## ##
或
## - ### ## ##
或
###-## ## ##
哈希位置必须是数字格式的前导。我似乎无法想到这样做的事情......
在某些情况下(如国际电话号码),必须使用(,)和+符号。在这种情况下,转换字符串看起来像这样(例如)
+(##)-(#)##-## ## ##
任何想法?
答案 0 :(得分:3)
$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
。如果您的数字比#更多,您也可以将它们附加到格式中。