如题,将一个银行卡号,位数可能19-30不等,格式化前6后4,中间不确定的数目是6个*号替换。
例如:622202 0200010150 4548  替换为 622202******4548参考方法:{$orders[index].cardBankNo|regex_replace:"/(2\d)\d\d(\d)/":"\$1**\$2"} (这个不能达到效果)求助一个替换正则。急急急!

解决方案 »

  1.   

    <?php
    echo preg_replace('/^(\d{6}).+(\d{4})$/',"$1******$2",'622202 02050 4548');
    ?>
      

  2.   


    这个在php里的,我是需要在页面上使用smarty手册里的函数regex_replace
    <td>{$orders[index].cardBankNo|regex_replace:"/(2\d)\d\d(\d)/":"\$1**\$2"}</td>
    '/^(\d{6}).+(\d{4})$/'这个表达式放进去不能用,输入错误 - -,麻烦大哥在改改,因为是一个数组,在页面上循环,在php里处理会增加一个循环,搜索速度会有影响。谢谢大哥
      

  3.   

    smarty 手册函数regex_replace - -求解
      

  4.   

    试下这个,不行的话先格式化好,再assign到模板里面
    '/^([\d|\s]{6})[\d|\s]+([\d|\s]{4})$/'
      

  5.   

    {$orders[index].cardBankNo|regex_replace:"/^(\d{6}).+(\d{4})$/":"$1******$2"} 
    试一下呢
      

  6.   


    还是不行,页面结果
    )[\d|\s]+([\d|\s]4)$/":"\$1******\$2"}
      

  7.   

    这个也是,不知道是不是 smarty不能识别稍微复杂点的正则
      

  8.   

    smarty会把{}里面的内容当成变量来解析,所以正则里面的大括号会被编译掉
    把正则里面的 '{' 换成{ldelim}, '}' 换成{rdelim} 应该就没问题了
      

  9.   

    可以再模板里面嵌入一段PHP.然后用PHP的正则.
      

  10.   

    <{$number|regex_replace:"/(\d{6})\d*(\d{4})/":"\$1******\$2"}>
      

  11.   

    {$cc|regex_replace:"/(\d\d\d\d\d\d).*(\d\d\d\d)$/":"\$1******\$2"}
      

  12.   

    楼上是我测试的语句
    按楼主的写法应该
    {$orders[index].cardBankNo||regex_replace:"/(\d\d\d\d\d\d).*(\d\d\d\d)$/":"\$1******\$2"} 
      

  13.   

    给楼主解释几句吧。
    不是说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"}>
    就没问题了。
      

  14.   

    <?php
    //正则表达式用法$code = "622202 0200010150 4548";
    echo preg_replace("/^(\d{6}).+(\d{4}$)/","$1******$2",$code);?>