我想从$S中删除空格和短划线,然后在字符串中每3位数字后包含短划线。
00-44 48 5555 8361
应转换为004-448-555-583-61
0 - 22 1985--324
应转换为022-198-53-24
555372654
应转换为555-372-654
现在,substr_replace()
的工作方式很奇怪。
这是我的代码,
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message'n";
function solution($S) {
// write your code in PHP5.5
$patterns = array();
$patterns[0] = '{ }';
$patterns[1] = '{-}';
$number = preg_replace($patterns, "", $S);
//echo $number;
for($i=3; $i<strlen($number); $i=$i+4){
$number = substr_replace($number,"-", $i, 0);
}
return $number;
}
使用chunk_split可以轻松插入连字符。不过,它在最后插入了一个额外的,所以你需要使用rtrim来删除它:
$str = '00-44 48 5555 8361';
$result = rtrim( chunk_split( preg_replace( '/[- ]/', '', $str ), 3, '-' ), '-' );
// '004-448-555-583-61'
编辑:
要解决最后一种情况,即您希望数字的末尾是wx-yz
而不是wxy-z
,您可以使用以下方法:
if ( strlen( $result ) % 4 === 1 )
$result = preg_replace( '/('d)-('d)$/', '-$1$2', $result );