Подтвердить что ты не робот

PHP удаляет запятые из числовых строк

В PHP у меня есть массив переменных, которые являются ВСЕМИ строками. Некоторые из сохраненных значений представляют собой числовые строки с запятыми.

Что мне нужно:

Способ обрезать запятые из строк и ТОЛЬКО делать это для числовых строк. Это не так просто, как кажется. Основная причина заключается в следующем:

$a = "1,435";

if(is_numeric($a))
    $a = str_replace(',', '', $a);

Это не работает, потому что $a = "1435" является числовым. Но $a = "1,435" не является числовым. Поскольку некоторые из строк, которые я получаю, будут регулярными предложениями с запятыми, я не могу выполнить замену строки на каждой строке.

4b9b3361

Ответ 1

Не тестировалось, но, вероятно, что-то вроде if(preg_match("/^[0-9,]+$/", $a)) $a = str_replace(...)

Ответ 2

Сделайте это наоборот:

$a = "1,435";
$b = str_replace( ',', '', $a );

if( is_numeric( $b ) ) {
    $a = $b;
}

Ответ 3

Самый простой способ:

$var = intval(preg_replace('/[^\d.]/', '', $var));

или если вам нужно float:

$var = floatval(preg_replace('/[^\d.]/', '', $var));

Ответ 4

 function cleanData($a) {

     if(is_numeric($a)) {

     $a = preg_replace('/[^0-9,]/s', '', $a);
     }

     return $a;

}

Ответ 5

Попробуйте это. Это сработало для меня.

number_format(1235.369,2,'.','')

если вы используете number_format, как это number_format(1235.369,2) ответ будет 1,235.37

но если вы используете, как показано ниже

number_format(1235.369,2,'.','') ответ будет 1235.37

удаление "," из "1,235.37"

Ответ 6

Если вы хотите удалить запятые из чисел внутри строки, которая также содержит слова, самым простым способом, я думаю, будет использовать preg_replace_callback:

Пример:  

$str = "Hey hello, I've got 12,500 kudos for you, spend it well"

function cleannr($matches)
{
    return str_replace("," , "" , $matches["nrs"]);
}

$str = preg_replace_callback ("/(?P<nrs>[0-9]+,[0-9]+)/" , "cleannr" , $str);


Выход:

"Привет, у меня есть 12500 центов для вас, хорошо проводите"


В этом случае шаблон (регулярное выражение) отличается от значения, указанного в принятом ответе, поскольку мы не хотим удалять другие запятые (пунктуация).

Если мы будем использовать /[0-9,]+/ здесь вместо /[0-9]+,[0-9]+/, выход будет:

"Привет, у меня есть 12500 центов, потому что вы хорошо проводите"

Ответ 7

Похоже, что идеальным решением для того, что вы ищете, является filter_var():

$a = filter_var($a, FILTER_VALIDATE_FLOAT, FILTER_FLAG_ALLOW_THOUSAND);

(обратите внимание, что он использует FILTER_VALIDATE_FLOAT вместо FILTER_VALIDATE_INT, потому что у него в настоящее время нет опции FILTER_FLAG_ALLOW_THOUSAND).