regex — разрешить отрицательное десятичное число, используя preg_replace

У меня есть маска ввода в переменной, как это 200.000,54

Это мой php код

<?php

class MoneyHelper
{
public function getAmount($money)
{
$cleanString = preg_replace('/([^0-9\.,])/i', '', $money);
$onlyNumbersString = preg_replace('/([^0-9])/i', '', $money);

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

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

//return (float) str_replace(',', '.', $removedThousandSeparator);

return [
'cleanString' => $cleanString,
'onlyNumbersString' => $onlyNumbersString,
'separatorsCountToBeErased' => $separatorsCountToBeErased,
'stringWithCommaOrDot' => $stringWithCommaOrDot,
'removedThousandSeparator' => $removedThousandSeparator,
'result' => (float) str_replace(',', '.', $removedThousandSeparator)

];

}
}


$obj = new MoneyHelper;
echo var_dump($obj->getAmount('200.000,54')) ;

Результат:

array (size=6)
'cleanString' => string '200.000,54' (length=10)
'onlyNumbersString' => string '20000054' (length=8)
'separatorsCountToBeErased' => int 1
'stringWithCommaOrDot' => string '200000,54' (length=9)
'removedThousandSeparator' => string '200000,54' (length=9)
'result' => float 200000.54

Все хорошо, пока я не проверю этот код с отрицательным числом.
Скажем - 200.000,54

Тогда результат все тот же,

array (size=6)
'cleanString' => string '200.000,54' (length=10)
'onlyNumbersString' => string '20000054' (length=8)
'separatorsCountToBeErased' => int 1
'stringWithCommaOrDot' => string '200000,54' (length=9)
'removedThousandSeparator' => string '200000,54' (length=9)
'result' => float 200000.54

Как я могу получить отрицательное число в результате?
Пожалуйста, порекомендуйте …

Обновить

Вы не сообщили нам свой желаемый результат

Я нуждаюсь: 'result' => float -200000.54

0

Решение

Вам просто нужно добавить отрицательные символы к вашим классам отрицанных символов. Я могу сделать несколько других корректировок.

Фрагмент 🙁Полная демонстрация)

$cleanString = preg_replace('/[^\d.,-]/', '', $money);
$onlyNumbersString = preg_replace('/[^\d-]/', '', $money);

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

$stringWithCommaOrDot = preg_replace('/[,.]/', '', $cleanString, $separatorsCountToBeErased);
$removedThousandSeparator = preg_replace('/[.,](?=\d{3,}$)/', '',  $stringWithCommaOrDot);

Выход:

array(6) {
["cleanString"]=>
string(11) "-200.000,54"["onlyNumbersString"]=>
string(9) "-20000054"["separatorsCountToBeErased"]=>
int(1)
["stringWithCommaOrDot"]=>
string(10) "-200000,54"["removedThousandSeparator"]=>
string(10) "-200000,54"["result"]=>
float(-200000.54)
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector