大写字母、小写字母、纯数字、特殊符号。四种至少任意三种组合,长度不低于8位。
特殊符号:! @ . - _(以上五种符号都是英文状态下)
以下是我的正则 如果没写对那因该咋写 如果有写对还能优化吗
const re = /^((?=.*[a-z])(?=.*[A-Z])(?=.*[\d!@.\-_])|(?=.*\d)(?=.*[!@.\-_])(?=.*[a-zA-Z]))[\w!@.-]{8,}$/;
试一下这个
var regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@.\-_]).{8,}$/;
不是很熟正则,提供另一种解决思路,用于扩展参考
function matchReg (str) { if (!str || str.length < 8) { return false; } let resMap = {}; str = str.replace(/(([a-z])|([A-Z])|(\d)|([!@\.\-_]))/g, function (str, allMath, matchaz, matchAZ, matchNum, matchSymbol) { resMap = { matchaz: !!(resMap.matchaz || matchaz), matchAZ: !!(resMap.matchAZ|| matchAZ), matchNum: !!(resMap.matchNum|| matchNum), matchSymbol: !!(resMap.matchSymbol|| matchSymbol) } return ''; }); console.log('匹对情况', resMap); return Object.values(resMap).filter(Boolean).length >= 3 && str.length === 0;}
您给出的正则表达式可以满足您的需求,可以匹配四种字符类型中的至少三种,且长度不低于8位。但是,您的正则表达式还可以进行一些优化。
首先,您的正则表达式使用了(?=.*[a-z])(?=.*[A-Z])(?=.*[\d!@.\-_])
和(?=.*\d)(?=.*[!@.\-_])(?=.*[a-zA-Z])
来确保字符串包含至少三种类型的字符。这种写法是正确的,但是可以将两个正则表达式合并为一个。
其次,您在正则表达式中使用了[\w!@.-]{8,}
来确保字符串长度不低于8位。这个部分也是正确的,但是\w
可以匹配字母、数字和下划线,所以您可以使用\W
来匹配除了这三种字符以外的字符。这样可以确保字符串中只包含您所要求的字符类型。
综上所述,您的正则表达式可以优化为以下形式:
const re = /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@.\-_])(?=.*[\W_])[\w!@.\-]{8,}$/;
这个正则表达式仍然满足您的需求,而且更加简洁易读。
我想匹配一段字符串中所有的input 并使用replace进行替换,如果input里面有类似data-* 这种自定义属性的就跳过 不知道这种正则该怎么写,我也阅读了文档并使用google。都没找到 比如 <input type='text' /> 这种Input就匹配,<input data-xxx /> 带有自定义属性的input 正则则不匹配
这是什么原理
这段代码用来规范json字符串,有没有优雅的写法?
正则校验密码问题 实现包含3位及以上的数字字母密码,不允许为连续/重复的数字或字母,包括正序和倒序,例如:Abc.123、Aaaa@123、Zyx@321 使用正则校验密码正则好像不能校验,用程序写没啥思路
老师们怎么将这两个正则表达式合并成一个, 既能检查IPV4又能检查IPV6地址? 仅匹配ipv4或ipv6匹配都是正常的。 搞了好久搞不出来了... 请老师们指点一下。
关于正则的一个小问题 /#\/((\w)+)/.exec("/a-web/#/abc?") 返回值是 ['#/abc', 'abc', 'c', index: 7, input: '/a-web/#/abc?', groups: undefined] 数组第二项是匹配项(\w+) 返回 'abc' 数组的第三项 返回值 'c'怎么理解啊 没啥尝试