Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于密码验证的正则表达式,仅限特定字符_Javascript_Regex - Fatal编程技术网

Javascript 用于密码验证的正则表达式,仅限特定字符

Javascript 用于密码验证的正则表达式,仅限特定字符,javascript,regex,Javascript,Regex,我正在尝试创建一个用于密码验证的正则表达式。以下是要求 最小长度8 至少1个大写字母 至少1个小写字母 至少1个数字 这些字符中有0个或多个!@#$%^&*_~()-允许 a-z允许 A-Z允许 允许0-9 以下是我迄今为止的表达: ^.*(?=.{8,})(?=.[a-z])(?=.[a-z])(?=..[a-z])(?=.\d)(?=.[!@#$%^&*?!()-]*)。$ 这个表达式主要起作用,除了我需要它只允许5-9个项目符号。现在它将允许未指定的字符,例如+= 如何修改此表达式以仅允许

我正在尝试创建一个用于密码验证的正则表达式。以下是要求

  • 最小长度8
  • 至少1个大写字母
  • 至少1个小写字母
  • 至少1个数字
  • 这些字符中有0个或多个!@#$%^&*_~()-允许
  • a-z允许
  • A-Z允许
  • 允许0-9
  • 以下是我迄今为止的表达:

    ^.*(?=.{8,})(?=.[a-z])(?=.[a-z])(?=..[a-z])(?=.\d)(?=.[!@#$%^&*?!()-]*)。$

    这个表达式主要起作用,除了我需要它只允许5-9个项目符号。现在它将允许未指定的字符,例如
    +=


    如何修改此表达式以仅允许项目符号5-9,而不允许使用其他字符?

    对于第一个和第五个至第五个条件,您不需要进行前瞻性检查-您可以在最终匹配中检查所有这些,如

    ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\w!@#$%^&*?~()-]{8,}$
    
    使用前瞻检查条件2-4。对于实际匹配,我们需要至少8个字符的允许字符。我使用了
    \w
    intead of
    a-zA-Z0-9
    来缩短时间

    你可以看到它在工作


    站点提示:限制密码中的字符通常被视为一个坏主意。还有一些关于密码的内容。

    您可以将
    RegExp
    分解为离散的部分,添加或删除所需的部分,使用
    数组.prototype.each()
    ,包括
    &&/函数内的[+=]/.test(str)
    ,以及输入字符串的
    长度
    属性

    var matches=[/[A-Z]/,/[A-Z]/,/\d/,/[!@$%^&*?~()-]/];
    var str=“Ab0!#?~";
    var pw=匹配的.every(函数(re){
    返回重新测试(str)和&!/[+=]/.test(str)
    })&&str.length==8;
    
    控制台日志(pw)为什么要限制密码中的字符?更重要的是,为什么其他字符对您的密码存储是一个问题?为什么不对这些字符使用单独的检查?不确定“允许5-9和没有其他字符”是什么意思?@PeeHaa后端已经这样设计了。@melpomene说到regex,我是一个noob。我愿意接受任何建议。