如题,将一个银行卡号,位数可能19-30不等,格式化前6后4,中间不确定的数目是6个*号替换。
例如:622202 0200010150 4548 替换为 622202******4548参考方法:{$orders[index].cardBankNo|regex_replace:"/(2\d)\d\d(\d)/":"\$1**\$2"} (这个不能达到效果)求助一个替换正则。急急急!
例如:622202 0200010150 4548 替换为 622202******4548参考方法:{$orders[index].cardBankNo|regex_replace:"/(2\d)\d\d(\d)/":"\$1**\$2"} (这个不能达到效果)求助一个替换正则。急急急!
echo preg_replace('/^(\d{6}).+(\d{4})$/',"$1******$2",'622202 02050 4548');
?>
这个在php里的,我是需要在页面上使用smarty手册里的函数regex_replace
<td>{$orders[index].cardBankNo|regex_replace:"/(2\d)\d\d(\d)/":"\$1**\$2"}</td>
'/^(\d{6}).+(\d{4})$/'这个表达式放进去不能用,输入错误 - -,麻烦大哥在改改,因为是一个数组,在页面上循环,在php里处理会增加一个循环,搜索速度会有影响。谢谢大哥
'/^([\d|\s]{6})[\d|\s]+([\d|\s]{4})$/'
试一下呢
还是不行,页面结果
)[\d|\s]+([\d|\s]4)$/":"\$1******\$2"}
把正则里面的 '{' 换成{ldelim}, '}' 换成{rdelim} 应该就没问题了
按楼主的写法应该
{$orders[index].cardBankNo||regex_replace:"/(\d\d\d\d\d\d).*(\d\d\d\d)$/":"\$1******\$2"}
不是说smarty不支持复杂点的表达式。如果写成这样
{$cc|regex_replace:"/(\d{6}).*(\d{4})$/":"\$1******\$2"}
为什么不行
这是因为第一个'{'和最后一个'}'与{6}和{4}的大括号发生了冲突。要这样用的话就要自定义一下终结符。比如:
$smarty = new smarty();
$smarty->left_delimiter = "<{";
$smarty->right_delimiter = "}>";
这样
<{$cc|regex_replace:"/(\d{6}).*(\d{4})$/":"\$1******\$2"}>
就没问题了。
//正则表达式用法$code = "622202 0200010150 4548";
echo preg_replace("/^(\d{6}).+(\d{4}$)/","$1******$2",$code);?>