Intereting Posts
Как использовать FormHelper :: postLink () внутри формы? Ошибка при включении redirect_uri с getLoginUrl (PHP PHP SDK) Как реализовать права пользователя в Laravel 4? TinyMCE + JQuery + PHP + AJAX Специальный выпуск символов Как я могу установить cookie, а затем перенаправить на PHP? PHP / MySQL Показывать первые X результатов, скрыть остальные Создание диаграммы с графическими картами Google на стороне сервера json file Кэширование запросов yii framework php regex: получить значение src Месяцы не отображаются корректно с помощью php cURL не может использовать клиентский сертификат, на локальном сервере Как вы удаляете пробелы из массива с помощью PHP? В чем проблема в коде, написанном для сравнения даты с сегодняшней датой? Отправка данных, таких как целые числа и текстовые строки, из телефона в веб-базу данных Отображение FAIL – отображение сущности класса 'PI \ UnidadBundle \ Entity \ HorasPorUnidad' неверно.

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

В 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 центов, потому что вы хорошо проводите»