JS(ES5)正则表达式(多个前瞻存在情况)进行密码匹配
现在有一个匹配问题,匹配密码,必须包含大写,小写和数字,和特殊字符(!,@,#,%,&),且大于6位。
先看明白要匹配的条件,必须包含大写、小写、数字和特殊字符,但是出现的顺序没有规定,只要包含有就行,一般的正则表达式都是按顺序来进行匹配的,所以有什么办法可以解决这个没有顺序的匹配呢,或者说有什么匹配机制可以每次匹配完,又重新从头开始进行下一次匹配呢?前瞻就可以。
1.前瞻表达式
在正则表达式当中有个东西叫做前瞻,有的管它叫零宽断言:
表达式 | 名称 | 描述 |
---|---|---|
(?=exp) | 正向前瞻 | 匹配后面满足表达式exp的位置 |
(?!exp) | 负向前瞻 | 匹配后面不满足表达式exp的位置 |
我们来看看前瞻的作用:
var str = 'Hello, Hi, I am Hilary.'; // 后面一定要匹配什么 var reg = /H(?=i)/g; var newStr = str.replace(reg, "T"); console.log(newStr);//Hello, Ti, I am Tilary.
在这个DEMO中我们可以看出正向前瞻的作用,同样是字符"H",但是只匹配"H"后面紧跟"i"的"H"。就相当于有一家公司reg,这时候有多名"H"人员前来应聘,但是reg公司提出了一个硬条件是必须掌握"i"这项技能,所以"Hello"就自然的被淘汰掉了。
以上内容摘至 : https://www.cnblogs.com/dong-xu/p/6926064.html
2.前瞻表达式每次进行匹配lastIndex(查找的起点 )都为0
如果是普通的正则表达式,且匹配模式是全局匹配(global),lastIndex匹配结果如下:
var str = 'aaaAAA'
var reg = /(.*[A-Z])/g
console.log(reg.lastIndex); // 输出 0
console.log(reg.exec(str)); // 简写就是匹配为 [aaaAAA]
console.log(reg.lastIndex); // 输出6 表示下次匹配从下标6开始
如果是前瞻表达式,lastIndex匹配结果如下:
var str = 'aaaAAA'
var reg = /(?=.*[A-Z])/g
console.log(reg.lastIndex); // 输出 0
console.log(reg.exec(str)); // 简写就是匹配到 [''] 即匹配到aaaAAA的前面位置,是空的
console.log(reg.lastIndex); // 输出0 表示下次匹配从下标0开始
所以说用前瞻表达式进行匹配,每次都是从头开始的。(不论匹配模式是否是全局匹配 global),
我们可以利用这个特性来进行没有顺序的匹配。
3.密码匹配问题(匹配密码,必须包含大写,小写和数字,和特殊字符(!,@,#,%,&),且大于6位。)
有了上面的基础,就可以进行密码匹配了,我们先效验密码必须包含大写、小写、数字和特殊字符:
var reg = /(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#%&])/g
//因为大写、小写、数字、特殊字符出现的位置未知
//所以要在每个表达式前加上 .* 表示前面可能有内容,可能没有内容
//用前瞻只是为了它会重新开始的机制,并不用它匹配到的前面的内容
然后上面条件满足了就可以限制其次数:
var reg = /^[A-Za-z\d!@#%&]{6,}$/g
最后可以把两个正则表达式合在一起就可以进行密码匹配
var str = '@GGA3124a3523'
var reg = /(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#%&])^[A-Za-z\d!@#%&]{6,}$/g
console.log(reg.test(str)); // true
JS(ES5)正则表达式(多个前瞻存在情况)进行密码匹配相关推荐
- 史上最详细的js日期正则表达式分享
最简单的正则 如 : /d{4}-/d{2}-/d{2} 但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题..... 对于日期的有效范围,不同的应用场景会有所不同.MSDN中定义的DateTi ...
- 重新拎一遍js的正则表达式
前言 js的正则表达式是前端中比较重要的部分,加入你要去面试,正则的题目必不可少.我之前的这篇文章中提及过.具体可以看:http://www.haorooms.com/post/qianduan_mi ...
- 收集的JS常用正则表达式等
// 短日期,形如 (2003-12-05) function strDateTime(str) { var r = str.match(/^(d)(-│/)(d)2(d)$/); if(r==n ...
- 收集的JS常用正则表达式等(转载)
// 短日期,形如 (2003-12-05) function strDateTime(str) { var r = str.match(/^(d)(-│/)(d)2(d)$/); if( ...
- 【JS】正则表达式。以vue词法分析、句法分析为例
1,声明 其声明和其他的基本类型类似,都可以用字面量声明,或者包装类声明: console.log(/abc/g); // /abc/gconsole.log(new RegExp("abc ...
- html正则表达式 数字,js的正则表达式教程 js 正则表达式 3位数字
允许空格和~之间的字符但不包含# " ' & = < > ( ) % + \ ; $ | / 用eval转义,你现在reg是一个字符串 正确写法 var ch = &qu ...
- js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^\d{17}[\d|X]$|^\d{15}$/)(str的方法substr)...
js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^\d{17}[\d|X]$|^\d{15}$/)(str的方法substr) 一.总结 1.|符号的使用:var reg=/^\d ...
- js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g)...
js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g) 一.总结 方括号:范围 圆括号:选 大括号:数量 1.js正则是在双正斜杠之中: var reg2=/[a-z]/ ...
- JS的正则表达式[收藏]
JS的正则表达式 //校验是否全由数字组成 代码 function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.exec(s)) return ...
最新文章
- ListView style
- Java中的String字符串
- slider_wap
- Git 基本工作流程
- Bit-Z CEO长顺入围2018中国经济潮流人物
- NMF和SVD在推荐系统中的应用(实战)
- win98 老电脑 文件导出_首次装电脑之前何不先模拟一番,这款练手神器可以帮你...
- SCCM 2012系列3 安装SCCM 2012
- jmeter单线程读取csv_jmeter中如何使用csv文件并读取数据
- 二进制文件(.bin)查看
- 如何批量转换图片格式?怎样统一修改图片格式?
- linux wav 转mp3,linux下wav转换为mp3
- 成都焱炎 抖音AI大数据 不root 不装xp
- 日常记账如何自定义设置收支类别及账户
- android日程源代码,android日程表实现---仿滴答清单
- 优秀的免版权图库软件推荐,软件内图片均可免费商用。
- 华3C交换机调试基本
- 交换游戏(状态压缩、记忆化搜索)
- 【Sql】sql server2008附加数据库:错误9003
- Nordic nRF52832申报要素
热门文章
- [Toddler's Bottle]fd
- node升级版本、npm升级版本
- 微信开发者工具的更新
- 计算机桌面怎么全屏显示,电脑显示器如何设置成满屏
- 数据结构入门学习之数据结构学些什么?
- delphi去掉字段前后的引号_Delphi编程SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法...
- logback的additivity=false 与root关系
- 干货:蓝海创意云制作液体教程来啦~
- html调起苹果手机摄像头_html5摄像头 如何调用手机摄像头
- javascript中的沙箱