Ответ 1
Вы можете использовать preg_replace для замены всех нецифровых символов и запятой и периодом/полной остановкой следующим образом:
<?php
$testString = "12.322,11T";
echo preg_replace("/[^0-9,.]/", "", $testString);
?>
Если у меня есть следующие значения:
$var1 = AR3,373.31
$var2 = 12.322,11T
Как я могу создать новую переменную и установить ее на копию данных, содержащих удаленные нечисловые символы, за исключением запятых и периодов? Вышеуказанные значения возвращают следующие результаты:
$var1_copy = 3,373.31
$var2_copy = 12.322,11
Вы можете использовать preg_replace для замены всех нецифровых символов и запятой и периодом/полной остановкой следующим образом:
<?php
$testString = "12.322,11T";
echo preg_replace("/[^0-9,.]/", "", $testString);
?>
Я удивлен, что здесь не упоминалось filter_var, потому что это был такой старый вопрос...
PHP имеет встроенный метод, используя фильтры для очистки. В частности, тот, который будет использоваться в этой ситуации, FILTER_SANITIZE_NUMBER_FLOAT
с флагами 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 (хотя и буквально в наносекундах).
Самый простой способ по-настоящему удалить все нечисловые символы:
echo preg_replace('/\D/', '', $string);
\D
представляет "любой символ, который не является десятичной цифрой"
Если запрос заключается в удалении всего (и не только одного) не численного char, возможно, предыдущее может быть написано так же очень простым способом (но вы могли бы написать функцию, чтобы передать строку и вернуть ее необходимое значение без символов.. в любом случае..):
<?php
$String1 = 'AR3,373.31';
$String2 = '12.322,11T';
echo preg_replace('/[^0-9,.]+/i', '', $String1);
echo preg_replace('/[^0-9,.]+/i', '', $String2);
?>
Если буквы всегда находятся в начале или в конце, вы можете просто просто использовать обрезку... нет необходимости в регулярном выражении
$string = trim($string, "a..zA..Z"); // this also take care of lowercase
"AR3,373.31" --> "3,373.31"
"12.322,11T" --> "12.322,11"
"12.322,11" --> "12.322,11"
Тот же ответ, что и middaparka, но удалите ,.
$unformatted_phone = "phone 122-3222223.ext 442";
echo preg_replace("/[^0-9]/", "", $unformatted_phone);