在“替换”选项中给出“货币字符串”时,Preg_replace会给出不正确的结果

时间:2016-02-04 14:41:19

标签: php regex preg-replace currency

Preg_replace在替换选项中给出($ 1,500)等货币字符串时会产生不正确的结果。

这是我的代码

<?php
$amount = '$1,500.00';
echo $amount. "<br />";
echo preg_replace('/{amount_val}/', $amount, '{amount_val}'); // it gives ",500" but i need "$1,500"

?>

我尝试使用preg_quote,请查看以下代码段

<?php

$amount = '$1,500.00';
$amount = preg_quote('$1,500.00');
echo $amount. "<br />";
echo preg_replace('/{amount_val}/', $amount, '{amount_val}'); // it gives "$1,500\.00" but i need "$1,500"

?>

我怎样才能得到确切的结果,即 $ 1,500.00

请帮我解决这个问题。

提前致谢

2 个答案:

答案 0 :(得分:1)

只需逃离美元符号,请参阅a demo on ideone.com

<?php
$amount = '\$1,500.00';
echo preg_replace('~{amount_val}~', $amount, '{amount_val}');
// output: $1,500
?>

或者(这是 真的 你在追求什么?)

<?php
$amount = '$1,500.00';
echo preg_replace('~{amount_val}~', str_replace('$', '\$', $amount), '{amount_val}');
?>

答案 1 :(得分:1)

由于您要替换文字字符串,因此不需要使用正则表达式:

$amount = '$1,500.00';
$result = str_replace('{amount_val}', $amount, $yourstring);

现在为什么你用preg_replace得到一个奇怪的结果?

在替换字符串中,每个序列$n(其中n是数字或&)被视为对捕获组的引用,并且是该组中捕获的角色的占位符。这就是为什么,为了避免含糊不清,你应该逃避$字符,以确保获得文字$