删除短划线、空格并在每3位数字后再次添加短划线


Removing dashes, spaces and adding dashes again after every 3 digits

我想从$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 );