PHP удаляет запятые из числовых строк - PullRequest
43 голосов
/ 18 февраля 2012

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

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

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

$a = "1,435";

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

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

Ответы [ 6 ]

88 голосов
/ 18 февраля 2012

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

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

if( is_numeric( $b ) ) {
    $a = $b;
}
21 голосов
/ 18 февраля 2012

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

16 голосов
/ 07 апреля 2015

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

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

или если вам нужно плавать:

$var = floatval(preg_replace('/[^\d.]/', '', $var));
2 голосов
/ 06 сентября 2017

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

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

, если вы используете числовой формат, подобный этому number_format(1235.369,2) ответ будет 1235,37

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

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

, это удаляет "," из "1 235,37"

2 голосов
/ 18 февраля 2012
 function cleanData($a) {

     if(is_numeric($a)) {

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

     return $a;

}
1 голос
/ 06 сентября 2017

Если вы хотите удалить запятые из чисел внутри строки, которая также содержит слова, я думаю, что проще всего было бы использовать 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 похвал, ты хорошо проводишь время»

...