最近接到了编辑这样的需求——『手机号做特殊处理,中间四位替换为*』并且给出了常见的联系方式:
Ø 正常联系方式
l 网上颇有知名度的当地导游王家乐(15274422092 ),QQ:(1453657757)
l 陈导(电话15974427155 QQ609137454 )
l 星期八客栈(电话:18674440396,订房qq:1291645848)
l 侯师傅,联系方式15547038013QQ546826424)
Ø 添加字符联系方式
l 郑师傅1-3-6-7-7-7-3-9-0-7-9,封师傅1-3-7-6-8-7-1-9-0-3-7
l 小伍吧(QQ852----713-------352)
l 小黎自助旅游qq422-678-881
l 陈真电话;⒈⒌⒉⒎⒋⒋⒐⒎⒊⒋二,QQ;2234 00124
l 推荐张家界清风自由行旅游网客服小朱(qq:2569-656860)
l 王师傅(联系电话:137-2203-4722)
l 出售188 6613 0199黑车交易市场
Ø 大写联系方式
l 郑师傅(壹叁陆柒柒柒叁玖零柒玖),封师傅(壹叁柒陆捌柒壹玖零叁柒)
l 电话:一五八六五四八三七一二
l 联系一三六八零零六七二三八
突然感叹最近的代码是不是太智能了……
本来是打算后端直接处理的,但是因为考虑到之后可能会出现需要用到用户联系方式的情况(比如我们可以倒买倒卖用户的联系方式嘛哈哈哈哈 当然是开玩笑),因此在前端展现的时候对电话号码进行处理——于是任务落在了我头上……
于是我就开始思考:
那么问题来了,因为所有数据都是通过同步数据打给前端的,所以
- 不能用js写,因为JS是在页面加载完之后才执行的,那个时候游记都已经展现了,还改个鬼啊……
- 不能用smarty语法写,因为不会……嘿嘿
所以就只能写php了(php我也不会啊,但是可以抄啊)我一个前端居然开始写php了……其实也就是写了个方法,在smarty中调用就好了
首先是判断是否有多个连续的大写号码
一开始的正则是这么写的:$reg = "/[一二三四五六七八九零壹贰弎肆伍陆柒捌玖〇⒈⒉⒊⒋⒌⒎⒐]{9,11}/" 结果发现匹配出来是乱码
中途踩了很多坑,基本可以参考这篇文章http://my.oschina.net/BearCatYN/blog/413833
一开始就单纯写的unicode编码,$reg = “/[\u58f9\u8d30\u5f0e\u8086\u4f0d\u9646\u67d2\u634c\u7396\u3007]{9,11}/"这样的,JS里面就是这样的嘛,结果发现根本没有匹配到
原来PHP正则表达式中不支持下列 Perl 转义序列:L, l, N, P, p, U, u, or X ,在 UTF-8 模式下,允许用“\x{...}”,花括号中的内容是表示十六进制数字的字符串,于是改成$reg = "/\x{58f9}\x{8d30}\x{53c1}\x{8086}\x{4f0d}\x{9646}\x{67d2}\x{634c}\x{7396}\x{3007}]{9,11}/“,还是不行……
于是加了一个修正符『u』,表示按unicode(utf-8)匹配(主要针对多字节比如汉字),$reg = "/[\x{58f9}\x{8d30}\x{53c1}\x{8086}\x{4f0d}\x{9646}\x{67d2}\x{634c}\x{7396}\x{3007}]{9,11}/u”,然后就好啦~好开心呢~
(对了,『三』的大写是『叁』不是『弎』……为什么我会弄错……)
在此附上找到的一些unicode,各种unicode 有的字符不知道怎么打出来的 待补
1. 这是『一二三四五六七八九零』的unicode
\x{4e00}\x{4e8c}\x{4e09}\x{56db}\x{4e94}\x{516d}\x{4e03}\x{516b}\x{4e5d}\x{96f6}
2. 这是『壹贰叁肆伍陆柒捌玖〇』的unicode
\x{58f9}\x{8d30}\x{53c1}\x{8086}\x{4f0d}\x{9646}\x{67d2}\x{634c}\x{7396}\x{3007}
3. 这是『⒈⒉⒊⒋⒌⒍⒎⒏⒐』的unicode
\x{2488}-\x{2490}
4. 这是『①②③④⑤⑥⑦⑧⑨⓪』的unicode
\x{2460}-\x{2468}\x{24ea}
5. 这是『❶❷❸❹❺❻❼❽❾』的unicode
\x{2776}-\x{277e}
6. 这是『⑴⑵⑶⑷⑸⑹⑺⑻⑼』的unicode
\x{2474}-\x{247c}
7. 这是『㈠㈡㈣㈤㈥㈦㈧㈨』的unicode
\x{3220}-\x{3228}
8. 这是『㊀㊁㊂㊃㊄㊅㊆㊇㊈』的unicode
\x{3280}-\x{3288}
感觉自己已经瞎了……
之后做一个替换的映射表,将匹配到的字符串进行替换,完成!
好啦,我要继续写代码了~
==========================================================================================================
20160924更新
以上主要涉及到两个函数preg_match_all和preg_match,这两个函数的区别可以参考http://blog.csdn.net/i1988/article/details/5830142这个文章,主要是匹配次数的问题,然后还要考虑好最后自己需要的是$match[0] 还是$match[1]的结果。
然后现在又遇到这样的问题,就是……链接也被干掉了,比如图片(视频、链接什么的不好截图我就不发了,反正结果你们也能猜到),一查代码
……
唉,现在就要做规避了……
细节太伤了,原谅我不想说……直接简单粗暴地上图吧,反正你们关心的也是这个(好像还是不能完全规避,唉 走一步看一步吧)
好了 我又要去写代码啦……(我们今天上班你们知道吗……)