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

2011-03-27 15:17:32 +08:00
 fim8
上传一个文本,里面都是手机号,需要批量写入数据库中,

循环操作时候是这样的:

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

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



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

例如15855558888变成158****8888

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

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

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

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

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

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

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

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

$a = '15855558888';
substr_replace($a, '****', 3, 4);
yokle
2011-05-04 11:23:00 +08:00
手机号码 字符规定的。 还不如用分割再拼凑的方面。 简单方便
kojp
2011-05-04 11:58:37 +08:00
V2EX 好人真多~~~~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/10513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX