В PHP у меня есть массив переменных, которые являются ВСЕМИ строками. Некоторые из сохраненных значений представляют собой числовые строки с запятыми.
Что мне нужно:
Способ обрезать запятые из строк и ТОЛЬКО делать это для числовых строк. Это не так просто, как кажется. Основная причина заключается в следующем:
$a = "1,435"; if(is_numeric($a)) $a = str_replace(',', '', $a);
Это терпит неудачу, потому что $a = "1435"
является числовым. Но $a = "1,435"
не является числовым. Поскольку некоторые из строк, которые я получаю, будут регулярными предложениями с запятыми, я не могу выполнить замену строки на каждой строке.
Не проверено, но возможно что-то вроде if(preg_match("/^[0-9,]+$/", $a)) $a = str_replace(...)
Сделайте это наоборот:
$a = "1,435"; $b = str_replace( ',', '', $a ); if( is_numeric( $b ) ) { $a = $b; }
Проще всего было бы:
$var = intval(preg_replace('/[^\d.]/', '', $var));
или если вам нужно поплавок:
$var = floatval(preg_replace('/[^\d.]/', '', $var));
function cleanData($a) { if(is_numeric($a)) { $a = preg_replace('/[^0-9,]/s', '', $a); } return $a; }
Попробуйте это. Это сработало для меня
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"
Если вы хотите удалить запятую из чисел внутри строки, которая также содержит слова, самым простым способом, я думаю, будет использование 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 центов, потому что вы хорошо проводите»