如何从Euro(€)表达式中删除特定的前导和尾随字符?

时间:2017-08-27 12:59:20

标签: php regex substring preg-replace currency

我有一个包含里面价格的字符串。

我需要删除小数部分和货币部分。

PHP可以使用str_replace()函数删除货币符号,但小数部分因产品而异。

<span class="price" id="old-price-3">€&nbsp;200,00 </span>
    <span class="price" id="product-price-3">€&nbsp;80,00</span>

我需要这样:

<span class="price" id="old-price-3">200 </span>
        <span class="price" id="product-price-3">80</span>

我尝试了str_replace()

echo str_replace(array(',00','€'),'','<span class="price" id="old-price-3">200 </span>
                <span class="price" id="product-price-3">80</span>');

但这仅在小数00时才有效。有人可以帮我这个吗?

3 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

/€&nbsp;([0-9]+),([0-9]+)/

<强>详情:

€&nbsp;   start the match with € and a space
([0-9]+)  match any digit 1 or more times
,         match a comma after the first number
([0-9]+)  match any digit 1 or more times after the comma

像这样:

<?php
$s = '<span class="price" id="old-price-3">€&nbsp;200,00 </span>
<span class="price" id="product-price-3">€&nbsp;80,00</span>';
var_dump(htmlentities(preg_replace("/€&nbsp;([0-9]+),([0-9]+)/", "$1", $s)));

Demo

答案 1 :(得分:2)

您不需要多个函数调用。

匹配,然后匹配零个或多个非数字,然后捕获一个或多个数字,然后匹配结束范围标记之前的任何内容。替换为捕获的匹配。

代码:(Demo)(Pattern Demo

$string='<span class="price" id="old-price-3">€&nbsp;200,00 </span>
<span class="price" id="product-price-3">€&nbsp;80,00</span>';

echo preg_replace("/€\D*(\d+)[^<]*/","$1",$string);

输出:

<span class="price" id="old-price-3">200</span>
<span class="price" id="product-price-3">80</span>

答案 2 :(得分:-2)

您可以使用strtok:

$x="200,00";
$x = strtok($x, ',');

现在x = 200;)