解析数字但保持负数

bry*_*yan 5 php regex numbers

我试图将数字取消格式化为原始形式,但保留它是否为负数.堆栈溢出的人引导我使用这个代码非常好用,但它没有保留负面.

任何人都可以帮助我更好地解决这个问题吗?

编辑 - 美元货币/正常数字

例:

1,234 = 1234

-1,234 = -1234

1,234.00 = 1234

1,234.56 = 1234.56

function numberUnformat($number)
{
   $cleanString = preg_replace('/([^0-9\.,])/i', '', $number);
   $onlyNumbersString = preg_replace('/([^0-9])/i', '', $number);

   $separatorsCountToBeErased = strlen($cleanString) - strlen($onlyNumbersString) - 1;

   $stringWithCommaOrDot = preg_replace('/([,\.])/', '', $cleanString, $separatorsCountToBeErased);
   $removedThousendSeparator = preg_replace('/(\.|,)(?=[0-9]{3,}$)/', '', $stringWithCommaOrDot);

   return (float) str_replace(',', '.', $removedThousendSeparator);
}
Run Code Online (Sandbox Code Playgroud)

And*_*art 6

如果你有可用的ICU扩展(在PHP 5.3中捆绑),试试这个:

$formatter = new NumberFormatter('en_US', NumberFormatter::DECIMAL);
echo $formatter->parse('-1,234.56');
Run Code Online (Sandbox Code Playgroud)