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">'1</sup>', $string);

如果没有,

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

应该做到这一点。

替代使用

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

这里有一个regex解决方案,用于查找字符串末尾的最后一个数字表示法。

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

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

$string = explode ('.', $product['price']);
$new_string = $string[0].'<sup>'. $string [1]. '</sup>';

用同样的方法计算人民币的正则表达式。

代码

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

尝试在线沙盒。

解释

substr($s, $i, $l)得到$s$l符号,从$i索引开始(索引从零开始)。

所以第一个substr($string, 0, strlen($string) - 2)得到除了最后两个符号之外的所有字符串。

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

有关substr的详细信息。

您应该使用模式匹配的正则表达式。请注意,替换参数中的$1与模式参数中的('d{2})匹配。CCD_ 10仅替换匹配的图案。此模式匹配后面跟有任意两位数字的.。由于.不包含在替换参数中,因此它不会显示在$string中。

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

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

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

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