我想从$ 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;
}
答案 0 :(得分:3)
您可以使用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 );