记录一些项目中用到的正则工具,将持续更新...

如果对JS中的正则不太了解,可以参考一下JS 中正则表达式必知必会

1. 字符串操作

去除字符串两边的空格 trim

String.prototype.trim = function() {return this.replace(/(^\s+)\|(\s+$)/g, '')
}

HTML编码对< > ' " &等字符转义,避免XSS攻击

function htmlEncode(str) {return str.replace(/[\<\>\"\'\&]/g, function(rs) {switch (rs) {case '<':return '&lt;'case '>':return '&gt;'case '&':return '&amp;'case ''':return '&apos;'case '"':return '&quot;'}})
}

找出重复最多的字符

let str = 'asss23sjdssskssa7lsssdkjsssdss'
const arr = str.split(/\s*/)                          // 把字符串转换为数组
const str2 = arr.sort().join('')                         // 首先进行排序,这样结果会把相同的字符放在一起,然后再转换为字符串
let value = ''
let index = 0
str2.replace(/(\w)\1*/g, function($0, $1) {                 // 匹配字符if (index < $0.length) {index = $0.length                          // index是出现次数value = $1                                 // value是对应字符}
})
console.log(`最多的字符: ${value} ,重复的次数: ${index}`)                 // s 17

数字格式化,1234567890 -> 1,234,567,890

下面简单分析下正则/\B(?=(\d{3})+(?!\d))/g

  1. /\B(?=(\d{3})+(?!\d))/g:正则匹配非单词边界\B,边界后面必须跟着(\d{3})+(?!\d)
  2. (\d{3})+:必须是1个或多个的3个连续数字
  3. (?!\d):第2步中的3个数字不允许后面跟着数字
  4. (\d{3})+(?!\d):所以匹配的边界后面必须跟着3*n(n>=1)的数字

最终把匹配到的所有边界换成,即可

const numFormat = str => str.replace(/\B(?=(\d{3})+(?!\d))/g, ',')

手机号中间四位换*

手机号中间4位数换成*

const validateMobile = str =>  /^[1][0-9]{10}$/.test(str) && str.replace(/(\d{3})(\d{4})(\d{4})/, (rs, $1, $2, $3) => `${$1}****${$3}`)

取URL中query到一个对象中

function getUrlParam(str) {const result = {}const valid = /(https?|ftp):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.exec(str)if (!valid) returnconst [rs, $1, $2, $3] = valid$3.match(/[a-zA-Z_]+=[^=&?]*/g).forEach(val => val.replace(/^(\w+)=(\w*)$/, ($0, $1, $2) => {result[$1] = $2}))return result
}getUrlParam('https://www.baidu.com?name=jawil&age=23&d=')         // {name: "jawil", age: "23", d: ""}

驼峰转下划线

'componentMapModelRegistry'.match(/^[a-z][a-z0-9]+|[A-Z][a-z0-9]*/g).join('_').toLowerCase();
// component_map_model_registry

下划线转驼峰

'component_map_model_registry'.replace(/_(\w)/g, (str, letter) => letter.toUpperCase())
// componentMapModelRegistry

2. 验证

用于验证时,通常需要在前后分别加上^$\b,以匹配整个待验证字符串

常用正则验证

function checkStr(str, type) {switch (type) {case 'phone': //手机号码return /^1\d{10}$/.test(str)case 'tel': // 座机return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str)case 'card': // 身份证return /^\d{15}|\d{18}$/.test(str)case 'pwd': // 密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线return /^[a-zA-Z]\w{5,17}$/.test(str)case 'postal': // 邮政编码return /[1-9]\d{5}(?!\d)/.test(str)case 'QQ': // QQ号 5-11位数字return /^[1-9]\d{4,10}$/.test(str)case 'email': // 邮箱return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str)case 'money': // 金额(小数点2位)return /^\d*(?:\.\d{0,2})?$/.test(str)case 'URL': // 网址return /(https?|ftp):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)case 'IP':  // IPreturn /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str)case 'day':  // 一个月的31天  01-09和1~31return /^((0?[1-9])|(([12])[0-9])|30|31)$/.test(str)case 'month': // 一年的12个月  01-09和1-12return /^(0?[1-9]|1[0-2])$/.test(str)case 'date':  // 日期时间return /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(str) || /^(\d{4})\-(\d{2})\-(\d{2})$/.test(str)case 'integer': // 整数 正整数或负整数return /^-?\d+$/.test(str)case 'decimal': // 小数return /^(-?\d+)(\.\d+)?$/.test(str)case 'english': // 英文return /^[a-zA-Z]+$/.test(str)case 'chinese': // 中文return /^[\u4E00-\u9FA5]+$/.test(str)case 'cname':  // 中文姓名 2-4位汉字return /^[\u4E00-\u9FA5]{2,4}$/.test(str)case 'lower':  // 小写return /^[a-z]+$/.test(str)case 'upper':  // 大写return /^[A-Z]+$/.test(str)case 'HTML':  // HTML标记return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str)default:throw new Error('检验出错 in function checkStr')}
}

验证是否是合法URL

function validateURL(textval) {const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/return urlregex.test(textval)
}

网上的帖子大多深浅不一,甚至有些前后矛盾,在下的文章都是学习过程中的总结,如果发现错误,欢迎留言指出~

参考:
JavaScript正则进阶之路——活学妙用奇淫正则表达式
js正则验证方法大全
javascript 总结(RegExp篇)

JS 活学活用正则表达式相关推荐

  1. [python]抓取啄木鸟社区《活学活用wxPython》内容与图片

    请参考crifan的博文如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站  这是我看到的关于爬取与模拟登陆最详尽的一个系列,总结整理了很多,获益不少 编辑 20130105 ...

  2. 活学活用流行的JavaScript库——《JavaScript实战》

    媒体评论 "本书并不像一本教材,畅读之后,你会觉得它就是一位讲课生动的老师,带领你遨游 JavaScript 海洋,把你推向技术风浪的前沿,同时又给了你一个功能完备的冲浪板,接下来就是你在风 ...

  3. Builder构建者模式,将复杂对象的创建过程与其表示分离,活学活用才是王道

    首发CSDN:徐同学呀,原创不易,转载请注明源链接.我是徐同学,用心输出高质量文章,希望对你有所帮助. 文章目录 一.前言 传统创建对象的弊端 二.构建者模式 1.通用写法 2.构建者模式的优缺点 3 ...

  4. UI设计必备工具之活学活用

    UI设计必备工具活学活用 工欲善其事,必先利其器.一个优秀的设计师,相关软件的熟练使用是一个重要的因素.随着移动端设备的普及,产品开发速度越来越快,相应的UI设计软件也层出不穷.下面让我们认识一下最经 ...

  5. 让知识活学活用,猿辅导小学课堂开课了!

    "辩"和"辨"怎么区分它们?妈妈让我买三斤土豆,要花多少钱?薄薄的快递箱,为什么运输中可以毫发无损?有些英语单词的发音怎么和中文很像?其实,答案就在猿辅导的课堂 ...

  6. 《跟二师兄学Nacos吧》EXT-01篇 看看Nacos是怎么活学活用简单工厂模式的!

    学习不用那么功利,二师兄带你一起轻松读源码- 番外篇简介 Nacos源码分析系列文章,在开篇已经提到过,写作的目标有两个:第一,能够系统的学习Nacos知识:第二,能够基于Nacos学到涉及到的知识点 ...

  7. 【建议改为:活 学 活 用】如何使用git工具一键隐藏/管理你的“学习资料”?

    引言: git工具一键隐藏"学习资料"是怎么回事呢?git工具相信大家都很熟悉,但是git工具一键隐藏"学习资料"是怎么回事呢,下面就让小编带大家一起了解吧.g ...

  8. C语言词库检测算法,c语言活学活用之自编词典.doc

    仿真查英语字典程序 ----<C语言程序设计> 课 程 设 计 [摘要][关键词] 1.算法分析 (1).当程序运行时,运用文件指针打开一个词库,并把文件内容读入结构体数组中,以便于下面程 ...

  9. Prometheus 如何做到“活学活用”,大牛总结的避坑指南

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者丨徐亚松 来源丨http://www.xuyasong ...

最新文章

  1. Oracle分析函数巧妙使用
  2. 关于new String(new byte[]{0})
  3. python实现简单的api接口-Python实现简单的API接口
  4. 【ssh从零单排】eclipse和tomcat整合配置
  5. 迈克菲实验室:仅42%的网络安全专业人士使用共享威胁情报
  6. 腾讯安全Blade团队亮相CanSecWest峰会
  7. Log4j远程代码执行漏洞验证
  8. 市面上有哪几种门_选择 low-e门窗玻璃,你想知道的都在这了
  9. 案例:强制开库遭遇ORA-16433的处理过程
  10. SpringBoot2.1.5(16)--- Spring Boot的日志详解
  11. 怎么利用c 语言编程进行进制计算,编程达人 《汇编、C语言基础教程》第一章 进制1.1 进制的定义(连载)...
  12. 央行等四部门发布资管新规全文
  13. 如何保存ISE综合后的RTL schematic为pdf
  14. 天勤数据结构高分笔记二叉排序树的实现
  15. ffmpeg 录屏推流_在 Linux 使用 ffmpeg 推流
  16. (Matlab实现)CNN卷积神经网络图片分类
  17. CF 1715 D. 2+ doors 位运算 1900
  18. 指导手册05:MapReduce编程入门
  19. 2018微软秋招面试经验(软件工程师岗位)
  20. Redis - CLUSTER命令中集群管理命令详解

热门文章

  1. vc6下c++编译器通不过,c编译器通过
  2. 何为优秀的机器学习特征 zz
  3. 获取所有栈的信息,只有最上面的和最下面的,但是不能获取栈中间的activity信息...
  4. 使用Identity Server 4建立Authorization Server (4)
  5. 常用的meta标签总结
  6. 用python 10min手写一个简易的实时内存监控系统
  7. 操作iframe里面的标签内容
  8. 用户权限管理:最常用的架构模型介绍
  9. 知名K12公司资深运营谢涵博:线上教育产业瓶颈该如何突破?
  10. 资讯类产品的数据驱动增长方法论