PHP 用 HTML 包裹字符串的最后两个字母

PHP wrapping last two letters of string with HTML

我 运行 在尝试替换一些字符串时遇到了问题。基本上我的页面上有一堆价格,看起来像

148.00

我想做的是 运行 仅替换最后 2 个数字,这样我就可以做类似

的事情

14800

Preg 替换对于人民币部分工作正常,因为它始终存在。

我的问题是最后两个数字可以是任何东西,这完全取决于价格,所以我不能只是删除和替换,我需要在它们周围包裹 HTML <sup> 标签。

$string = $product['price'];
$string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);
echo preg_replace('/RMB/', '<sup class="currency-sym">RMB</sup>', $string, 1);

假设最后两个字符是数字,你可以

$string=preg_replace('/(\d\d)$/', '<sup class="currency-sym"></sup>', $string);

如果没有,

$string=preg_replace('/(..)$/', '<sup class="currency-sym"></sup>', $string);

应该可以解决问题。

交替使用

$string=substr($string,0,-2).'<sup class="currency-sym">'.substr($string,-2).'</sup>';

这是一个正则表达式解决方案,用于查找字符串末尾的最终数字符号。

$string = 'RMB148.00';
$string = preg_replace('/(\d+)\.(\d{2})\z/','<sup></sup>',$string);
echo $string;

代码。

<?php

$string = '14842.00';
$string = substr($string, 0, strlen($string) - 2) . '<sup>' . substr($string, strlen($string) - 2, 2) . '</sup>';

echo $string;

Try online sandbox.

说明。

substr($s, $i, $l) 获取 $s$l 个符号,从 $i 索引开始(索引从零开始)。

所以首先 substr($string, 0, strlen($string) - 2) 获取除最后两个符号之外的所有字符串。

第二个 substr($string, strlen($string) - 2, 2) 只得到最后两个符号。

More about substr

您可以将以下内容与 explode () 函数一起使用

$string = explode ('.', $product['price']);

$new_string = $string[0].'<sup>'. $string [1]. '</sup>';

并以同样的方式为人民币做正则表达式。

您应该使用模式匹配正则表达式。请注意替换参数中的 </code> 匹配模式参数中的 <code>(\d{2})preg_replace() 只替换匹配的模式。此模式匹配 . 后跟任意两位数字。由于 . 未包含在替换参数中,因此它不会显示在您的 $string.

$string = preg_replace('/\.(\d{2})$/', '<sup></sup>', $string);

当然,你可以用一个preg_replace做你想做的事:

$string = preg_replace('/^(RMB)(\d+)(\.(\d{2}))?$/', "<sup class='currency-sym'></sup><sup></sup>", $string);

如果你想要 DOM 完整性,第二个例子可能是个好主意,否则当没有小数时它会创建一个空的 <sup></sup>