如何在PHP中使用加号为正数加前缀

use*_*466 22 php regex string number-formatting

我需要设计一个函数来返回负数,但+如果数字已经没有,应该在数字的开头添加一个符号.

例:

Input     Output
----------------
+1         +1
1          +1
-1         -1
Run Code Online (Sandbox Code Playgroud)

它只会获得数字输入.

function formatNum($num)
{
# something here..perhaps a regex?
}
Run Code Online (Sandbox Code Playgroud)

这个函数将被调用几次,echo/print因此越快越好.

更新:

谢谢大家的答案.我必须告诉sprintf基础解决方案真的很快.

cod*_*ict 63

您可以使用正则表达式:

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

但我建议不要使用regex这么微不足道的事情.最好在这里使用sprintf:

function formatNum($num){
    return sprintf("%+d",$num);
}
Run Code Online (Sandbox Code Playgroud)

来自PHP手册的sprintf:

一个可选的符号说明符,用于强制在数字上使用符号( - 或+).默认情况下,如果数字为负数,则仅使用 - 符号.这个说明符强制正数加上+符号,并在PHP 4.3.0中添加.

  • 'sprintf`的+1(我想知道为什么从一开始没有人提出这个问题;)但是那时你比我快:-D) (7认同)
  • `sprintf`的+1应该是打印*格式*字符串的第一个调用端口,如问题所示.-1(似乎随机?)用正则表达式解决方案为一个好的答案添加前缀. (6认同)
  • @ user318466:它们很强大,但它们往往比纯字符串函数慢得多. (3认同)
  • 效果很好.我选择sprintf one而不是专家建议的正则表达式. (2认同)

Dal*_*dal 7

function formatNum($num) {
   return ($num>0)?'+'.$num:$num;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我通过+1它返回++ 1 :( (2认同)
  • 如果传递 +1,则返回 +1。如果您将 '+1' 作为字符串传递给它,则它返回 ++1。不过,我更喜欢 UnicornAddict 的 sprintf 方法。 (2认同)