PHP Regex - удаляет все не числа и десятичные дроби

1

В PHP я пытаюсь исключить все из цены, за исключением чисел и десятичной точки, связанных с числом. С моим текущим выражением регулярного выражения у меня возникают проблемы с попыткой определить, связано ли десятичное число с числовым значением или символом валюты. Есть идеи?

preg_replace('/[^(0-9).]/', '', $price)

Значения теста => Ожидаемые значения

  1. 43,99 долл. США => 43,99
  2. ฿ 2,320,00 => 2320,00
  3. кр. 479,00 => 479,00
  4. 1 999 руб. => 1999
  • 0
    удалите скобки из вашего класса символов, если вы не хотите разрешить ( и ) качестве допустимых символов.
  • 1
    Это должно сработать: [^\d\.]
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Вы можете добиться этого с помощью

'/[^\d.]|(?<!\d)\./'

Он соответствует нецифровым и непериодическим периодам или периодам, которым не предшествует цифра. Затем просто замените пустой строкой, чтобы удалить согласованный текст.

См. Демонстрацию IDEONE:

$re = '/[^\d.]|(?<!\d)\./'; 
$ar = array("\$43.99", "฿2,320.00", "kr. 479.00", "1 999 руб."); 
$result = preg_filter($re, "", $ar);
print_r($result);

Вывод:

[0] => 43.99
[1] => 2320.00
[2] => 479.00
[3] => 1999

preg_replace версия preg_replace:

$re = '/[^\d.\n]|(?<!\d)\./'; // \n is added just for demo purposes! 
$str = "\$43.99\n฿2,320.00\nkr. 479.00\n1 999 руб."; 
echo $result = preg_replace($re, "", $str);
  • 0
    Не уверен, стоит ли мне сохранять демонстрацию preg_filter .... Я сейчас наполовину сплю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню