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;
说明。
substr($s, $i, $l)
获取 $s
的 $l
个符号,从 $i
索引开始(索引从零开始)。
所以首先 substr($string, 0, strlen($string) - 2)
获取除最后两个符号之外的所有字符串。
第二个 substr($string, strlen($string) - 2, 2)
只得到最后两个符号。
您可以将以下内容与 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>
。
我 运行 在尝试替换一些字符串时遇到了问题。基本上我的页面上有一堆价格,看起来像
元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;
说明。
substr($s, $i, $l)
获取 $s
的 $l
个符号,从 $i
索引开始(索引从零开始)。
所以首先 substr($string, 0, strlen($string) - 2)
获取除最后两个符号之外的所有字符串。
第二个 substr($string, strlen($string) - 2, 2)
只得到最后两个符号。
您可以将以下内容与 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>
。