PHP提问:我想把获得的数据中间四位数变星星,该怎么办? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
fim8
V2EX    程序员

PHP提问:我想把获得的数据中间四位数变星星,该怎么办?

  •  
  •   fim8 2011-03-27 15:17:32 +08:00 6297 次点击
    这是一个创建于 5378 天前的主题,其中的信息可能已经有所发展或是发生改变。
    上传一个文本,里面都是手机号,需要批量写入数据库中,

    循环操作时候是这样的:

    foreach($str_arr as $key => $value){

    $mobile_phOne= $value; ......省略其他



    现在我想把$value也就是手机号数据中间的四位通过什么方法加星。

    例如15855558888变成158****8888

    然后再录入数据库。有什么好的方法吗?谢谢大家:)
    22 条回复    1970-01-01 08:00:00 +08:00
    TheOnly92
        1
    TheOnly92  
       2011-03-27 15:18:45 +08:00
    用 preg_replace,#^([0-9]+){3}.*([0-9]+){4}$# replace into $1****$2

    应该吧。。。
    fim8
        2
    fim8  
    OP
       2011-03-27 15:20:24 +08:00
    @TheOnly92 这是正则吗?是不是得写成一个函数,然后把$value包含进去?
    TheOnly92
        3
    TheOnly92  
       2011-03-27 15:21:43 +08:00
    是正则,代码如下:

    preg_replace('#^([0-9]{3}).*([0-9]{4})$#','$1****$2',$value)

    刚才正则有点错误,现在修正了。
    fim8
        4
    fim8  
    OP
       2011-03-27 15:22:43 +08:00
    @TheOnly92 好的,我试试,太感谢了。回复的真迅速= =
    TheOnly92
        5
    TheOnly92  
       2011-03-27 15:24:24 +08:00
    嗯,刚刚没想到,原来还有比较“笨”的方法:

    $value = substr($value,0,3).'****'.substr($value,-4)
    icyflash
        6
    icyflash  
       2011-03-27 15:24:50 +08:00
    先split 再拼凑也行
    fim8
        7
    fim8  
    OP
       2011-03-27 15:30:06 +08:00
    @TheOnly92 成功了,非常感谢,得好好学学正则了。
    '#^([0-9]{3}).*([0-9]{4})$#','$1****$2'
    这句话的大概意思就是,把$value先取前三个数字,再取最后四个数字,其他的用****填充对吧。
    就是#^ .* $# 这三个比较不理解。
    总之非常感谢!
    fim8
        8
    fim8  
    OP
       2011-03-27 15:31:09 +08:00
    @TheOnly92 这个是用PHP函数弄的吧,很神奇。。虚心学习了:)再次感谢。
    TheOnly92
        9
    TheOnly92  
       2011-03-27 15:35:55 +08:00
    # 是正则中的定界符,^ 和 $ 分别表示句首和句尾,而 .* 则是任何东西。
    TheOnly92
        10
    TheOnly92  
       2011-03-27 15:36:44 +08:00
    补充:正则中的定界符可以利用任何符号,除了正则中已经有意义的符号。
    chloerei
        11
    chloerei  
       2011-03-27 15:37:24 +08:00
    =.= 是我就直接字符串拼接了……
    sospartan
        12
    sospartan  
       2011-03-27 15:38:01 +08:00
    @fim8 正则还是非常有用的 google一下
    kayue
        13
    kayue  
       2011-03-27 22:32:33 +08:00
    substr is a better way.
    vayn
        14
    vayn  
       2011-03-27 22:42:34 +08:00
    @kayue substr_replace is more convenient than substr in this scenario XD
    darasion
        15
    darasion  
       2011-03-27 22:46:30 +08:00
    保存的时候加星会把这个字段完全变成垃圾数据。

    最好还是显示的时候加星吧。
    jeeson
        16
    jeeson  
       2011-03-27 22:50:03 +08:00
    这种情况下, 正则表达式实在大材小用了

    正则表达式要先"编译", 然后再在字符串上"匹配" + "应用", 就这个问题而言, 性能可能会差10倍以上

    #5 "最笨"的反而是最好的方法
    kayue
        17
    kayue  
       2011-03-27 22:53:03 +08:00
    @jeeson +1
    vayn
        18
    vayn  
       2011-03-27 23:01:59 +08:00
    @darasion 赞同,如果数据库里直接存处理过的号码不如不存算了……

    $a = '15855558888';
    substr_replace($a, '****', 3, 4);
    yokle
        19
    yokle  
       2011-05-04 11:23:00 +08:00
    手机号码 字符规定的。 还不如用分割再拼凑的方面。 简单方便
    kojp
        20
    kojp  
       2011-05-04 11:58:37 +08:00
    V2EX 好人真多~~~~~
    predator
        21
    predator  
       2011-05-04 17:56:52 +08:00
    UPDATE table_name SET mobile_field_name = CONCAT(LEFT(mobile_field_name, 3), '****', RIGHT(mobile_field_name, 4));
    chuck911
        22
    chuck911  
       2011-05-04 18:03:42 +08:00
    @predator 哈哈,这样真正的号码再也找不回来了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5240 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 50ms UTC 07:49 PVG 15:49 LAX 23:49 JFK 02:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86