最近接到了编辑这样的需求——『手机号做特殊处理,中间四位替换为*』并且给出了常见的联系方式:

Ø  正常联系方式
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   联系一三六八零零六七二三八

突然感叹最近的代码是不是太智能了……

本来是打算后端直接处理的,但是因为考虑到之后可能会出现需要用到用户联系方式的情况(比如我们可以倒买倒卖用户的联系方式嘛哈哈哈哈 当然是开玩笑),因此在前端展现的时候对电话号码进行处理——于是任务落在了我头上……

于是我就开始思考:

Ø  正常联系方式
l   正则匹配连续出现的数字,中间四位改为『****』
regex_replace : "/(\d{3})\d{4}(\d{2,4})/" : "\$1****\$2"
顺便对qq号也进行了处理,现存qq号主要为5-11位,为防止对日期20160811进行误判,从9位的qq号开始处理
Ø  添加字符联系方式
l   现有的主要就是在各数字后面添加『.-*+_ 』等符号进行分离,因此需要匹配这些符号0次或者多次(特殊符号列举不完,需要不停地迭代)
regex_replace : "/((\d[\s~\·\`\!!@#\$¥%\^…&\*\((\))\-\_-——\+=\\、\{\}【】\[\]\/\??\.。\,,\<\>《》『』「」\"\'‘’“”]*){3})(\d[\s~\·\`\!!@#\$¥%\^…&\*\((\))\-\_-——\+=\\、\{\}【】\[\]\/\??\.。\,,\<\>《》『』「」\"\'‘’“”]*){4}((\d[\s~\·\`\!!@#\$¥%\^…&\*\((\))\-\_-——\+=\\、\{\}【】\[\]\/\??\.。\,,\<\>《》『』「」\"\'‘’“”]*){2,4})/" : "\$1****\$4"
(我就问你有没有瞎)注意这里分组是$4,给大家推荐一个正则的工具https://regexper.com,可以很清楚的看到正则的整个过程
Ø  大写联系方式
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]的结果。

然后现在又遇到这样的问题,就是……链接也被干掉了,比如图片(视频、链接什么的不好截图我就不发了,反正结果你们也能猜到),一查代码……

唉,现在就要做规避了……

细节太伤了,原谅我不想说……直接简单粗暴地上图吧,反正你们关心的也是这个(好像还是不能完全规避,唉 走一步看一步吧)

好了 我又要去写代码啦……(我们今天上班你们知道吗……

一段话中手机号中间四位做特殊处理相关推荐

  1. python判断一个或者多个字符串,是否出现在一段话中

    python判断一个或者多个字符串,是否出现在一段话中 要判断一段话中是否有几个字符串,只要一个出现就为True,刚开始想用map函数,后来发现也挺麻烦. 查了一些资料,发现用 any比较好 比如 p ...

  2. Java——检索一段话中出现次数最多的英文单词

    今日看到一个题目,要求在给出的一段话中检索出出现频率最高的单词.现在此分享. 题目: 在下面这段话中,检索出出现次数最多的英文单词: Look to the skies above London an ...

  3. python 在某段文章中确定一段话中每个词出现的次数,并排序

    #-*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding("gbk") import numpy as ...

  4. python 删除一段话中某一个字符串开始之后的所有字符串

    python要删除一段字符串之后的所有字符串,可以使用partition函数. 比如: p_example = "尊敬的领导,你们好.在开发的s公司历时两年直到工程完毕至今,扔拖欠我们18万 ...

  5. c++设置一个二维字符组初值_C语言 | 统计一段话中的字符

    "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...

  6. 设计一个脚本,根据关键字提取整段话中关键字所在的句子

    string[] arrstr ={"微风浅浅,花开淡淡","静坐窗前,给自己沏一壶茶","茶香袅袅,雀舌的味道从唇边滑过,甘而不涩,余味回旋.&qu ...

  7. html 对p中一段话指定样式,HTML5学习笔记(二)

    一.常用标签 1.< p> 标签:段落标签,用来显示一段文本 段落文本 2.< h> 标签:从 h1-h6字体越来越大.标题标签. 一级标题 二级标题 三级标题 四级标题 五级 ...

  8. 用shell打印下面这句话中字母数小于6的单词

    Bash also interprets a number of multi-character options 答案: #! /bin/bash for i in bash also interpr ...

  9. 类的包访问权限:《Java编程思想》中一段话的困惑

    类的包访问权限:<Java编程思想>中一段话的困惑 在<java编程思想第三版>(陈昊鹏 饶若楠等译)的第五章隐藏具体实现中,5.4节的最后一段话是: "正如前面所提 ...

最新文章

  1. JAVA中NEXTLINE()与NEXT()的区别
  2. java实现两个整数相除保留一位小数
  3. Python地信专题 |基于geopandas的空间数据分析-深入浅出分层设色
  4. 【大盛】全网首发HTC One/M7 最新本地化TrickDroid9.0/固件升级/永久root/高级,快速设置/稳定,流畅经典ROM...
  5. QT Creator应用程序开发——01简单按钮显示
  6. scala学习手记28 - Execute Around模式
  7. html打开显示脚本错误,IE浏览器显示脚本错误怎么办 IE浏览器脚本错误解决方法图文教程...
  8. Android使用谷歌插件,详解谷歌官方教程 Android插件ADT 9.0.0
  9. 基于JWT(Json Web Token)的授权方式
  10. 详解机器视觉照明重点内容
  11. 【高斯消元】BZOJ3503 [Cqoi2014]和谐矩阵
  12. Hibernate事务与并发问题处理(乐观锁与悲观锁)
  13. T60 Fan Error 解决办法.转自ZOL产品论坛-作者zxymb
  14. 环绕声混响效果器-Acon Digital Verberate Immersive 2.2.1 WiN-MAC
  15. java 图片 pdf_Java 添加图片到PDF
  16. 转载四代重歼的一片博文 - 漏斗子:“三大战役”完成 人民币国际化就登场
  17. Java基本sql_SQL基本语句
  18. 画洗碗机器人的思维导图_赞!三年级小学生画出这样的思维导图
  19. 鹿晗关晓彤公布恋情阿里云服务器救场 这位微博程序员新婚还加班
  20. 【笔记】C++之SLT的常用容器

热门文章

  1. Java依赖注入(DI)实例详解
  2. Taro之百度小程序一键登录埋点统计
  3. bzoj3875 [Ahoi2014Jsoi2014]骑士游戏
  4. Silvaco 学习笔记——solar(太阳能电池标准分析)
  5. linux终端实现骇客帝国的字符雨动画
  6. 夏目友人帐之撸猫动作倒放
  7. 6-使用VMWARE虚拟机调试XPE的方法
  8. 如何用R包做词频统计图(词云)?
  9. Medicare Fraud Detection using Machine Learning
  10. java 罗马数字_JAVA,罗马数字与阿拉伯数字的互转