Search code examples
phpregexstringnumber-formatting

How to prefix a positive number with plus sign in PHP


I need to design a function to return negative numbers unchanged but should add a + sign at the start of the number if its already no present.

Example:

Input     Output
----------------
+1         +1
1          +1
-1         -1

It will get only numeric input.

function formatNum($num)
{
# something here..perhaps a regex?
}

This function is going to be called several times in echo/print so the quicker the better.


Solution

  • You can use regex as:

    function formatNum($num){
        return preg_replace('/^(\d+)$/',"+$1",$num);
    }
    

    But I would suggest not using regex for such a trivial thing. Its better to make use of sprintf here as:

    function formatNum($num){
        return sprintf("%+d",$num);
    }
    

    From PHP Manual for sprintf:

    An optional sign specifier that forces a sign (- or +) to be used on a number. By default, only the - sign is used on a number if it's negative. This specifier forces positive numbers to have the + sign attached as well, and was added in PHP 4.3.0.