当前位置: 首页 > 知识库问答 >
问题:

javascript - js正则问题,我有写对不?

许嘉珍
2023-09-21
大写字母、小写字母、纯数字、特殊符号。四种至少任意三种组合,长度不低于8位。
特殊符号:! @ . - _(以上五种符号都是英文状态下)

以下是我的正则 如果没写对那因该咋写 如果有写对还能优化吗

const re = /^((?=.*[a-z])(?=.*[A-Z])(?=.*[\d!@.\-_])|(?=.*\d)(?=.*[!@.\-_])(?=.*[a-zA-Z]))[\w!@.-]{8,}$/;

共有3个答案

漆雕疏珂
2023-09-21

试一下这个

var regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@.\-_]).{8,}$/; 
漆雕嘉茂
2023-09-21

不是很熟正则,提供另一种解决思路,用于扩展参考

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;}
牛华皓
2023-09-21

您给出的正则表达式可以满足您的需求,可以匹配四种字符类型中的至少三种,且长度不低于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'怎么理解啊 没啥尝试