Вырезать текстовые символы из переменных, оставить цифры и запятые? - PullRequest
1 голос
/ 21 апреля 2011

Мне нужно иметь возможность вырезать символы из нескольких переменных, оставляя только цифры и знак £ (если, конечно, mysql не может добавить это само по себе?), А также любые разделители ..

так что если переменная $price_data contains

Now £193.95

Как мне закончить с

193.95?

Причина, по которой мне нужно это сделать, заключается в том, что мне нужно иметь возможность вставлять данные в поле в виде десятичного числа и иметь возможность упорядочивать их от наименее до самых дорогих.

Ответы [ 3 ]

1 голос
/ 21 апреля 2011

В зависимости от входных данных может быть более надежно удалить любые начальные или конечные не числа:

$price = preg_replace('_^\D+|\D+$_', "", $price_data);

Это оставляет точку, если она заключена в числа, и будет работать с литералом £, а также с экранированием £ и удаляет любой завершающий мусор.

1 голос
/ 21 апреля 2011

Финансовые данные должны храниться в виде целых чисел, а не с плавающей точкой из-за потери точности с плавающими типами данных: http://en.wikipedia.org/wiki/Precision_(computer_science)

Следовательно, вы должны хранить их в MySQL как целое число (представляющее центы), используя следующий кодчтобы извлечь только цифры:

$subject = 'Now £193.95';
preg_match_all('/\\d/', $subject, $result, PREG_PATTERN_ORDER);
$result = implode( '', $result[0] );
if( !empty($result) ){
    $result = intval($result);
}else{
    $result = 0;
}
var_dump( $result );

Также будьте осторожны при делении на целочисленные типы, потому что вы можете «потерять центы».

HTH

1 голос
/ 21 апреля 2011

попробуйте это:

$price_data = "Now £193.95";

list($t, $price) = explode('£',$price_data);

//$price should now contain 193.95

вот демо: http://codepad.org/az87F5wA

...