每3位数后删除破折号,空格并再次添加破折号

时间:2016-01-05 18:07:41

标签: php

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




}

1 个答案:

答案 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 );