[php] Удаление нечисловых символов (кроме периодов и запятых) из строки



Answers

Я удивлен, что здесь не упоминается filter_var потому что это такой старый вопрос ...

PHP имеет встроенный метод для этого, используя фильтры очистки . В частности, тот, который будет использоваться в этой ситуации, - FILTER_SANITIZE_NUMBER_FLOAT с FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND . Вот так:

$numeric_filtered = filter_var("AR3,373.31", FILTER_SANITIZE_NUMBER_FLOAT,
    FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);
echo $numeric_filtered; // Will print "3,373.31"

Также может быть полезно отметить, что, поскольку он встроен в PHP, он немного быстрее, чем использование регулярных выражений с текущими библиотеками PHP (хотя и буквально в наносекундах).

Question

Если у меня есть следующие значения:

 $var1 = AR3,373.31

 $var2 = 12.322,11T

Как я могу создать новую переменную и установить ее на копию данных, в которых удалены любые нечисловые символы, за исключением запятых и периодов? Вышеуказанные значения вернут следующие результаты:

 $var1_copy = 3,373.31

 $var2_copy = 12.322,11



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

<?php
$String1 = 'AR3,373.31';
$String2 = '12.322,11T';

echo preg_replace('/[^0-9,.]+/i', '', $String1);
echo preg_replace('/[^0-9,.]+/i', '', $String2);
?>



Тот же ответ, что и middaparka, но удалите ,.

$unformatted_phone = "phone 122-3222223.ext 442";
echo preg_replace("/[^0-9]/", "", $unformatted_phone);



Links



Tags

php php   string