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
Regex 关于URLEncode的安全ascii字符的密码复杂性的正则表达式_Regex_Passwords_Special Characters_Url Encoding - Fatal编程技术网

Regex 关于URLEncode的安全ascii字符的密码复杂性的正则表达式

Regex 关于URLEncode的安全ascii字符的密码复杂性的正则表达式,regex,passwords,special-characters,url-encoding,Regex,Passwords,Special Characters,Url Encoding,我正在进行密码检查,以满足以下要求: 至少8个字符,必须包含: 至少一个大写字符 至少一个小写字符 至少有一个特殊字符:*.\!。()- 字符是否连续并不重要 到目前为止,我的正则表达式似乎基本有效: ^(?=(.[0-9]){1,})(?=(.[\*\\!\.\.\(\)\-]){1,})(?=(.[a-z]){1,})(?=(.[a-z]){1,})。{8,}$ 但是我很难“只允许”指定的特殊字符集。例如。 匹配了“Sample!1234”,但也匹配了“Sa%mple!123”-这在所有

我正在进行密码检查,以满足以下要求:

至少8个字符,必须包含:

  • 至少一个大写字符
  • 至少一个小写字符
  • 至少有一个特殊字符:
    *.\!。()-
字符是否连续并不重要

到目前为止,我的正则表达式似乎基本有效:

^(?=(.[0-9]){1,})(?=(.[\*\\!\.\.\(\)\-]){1,})(?=(.[a-z]){1,})(?=(.[a-z]){1,})。{8,}$

但是我很难“只允许”指定的特殊字符集。例如。 匹配了“Sample!1234”,但也匹配了“Sa%mple!123”-这在所有情况下都必须失败,因为不允许使用特殊字符“%”,而不管是否有任何其他允许的特殊字符。我认为问题在于点量词,它考虑了任何字符,我还没能解决这个问题


为了更好地理解技术背景:我们操作一个windows应用程序(Dynamics NAV),该应用程序使用一个自定义开发的接口,该接口必须通过HTTP请求/SOAP信封在IBM Websphere上进行身份验证。web服务本身能够根据active directory验证用户/密码。我在interface应用程序中遇到了一个问题,当涉及到用于windows密码复杂性的特殊字符时。在传输时,如果使用了诸如%、§或+之类的特殊字符,并且接口应用程序对用户和密码进行URL编码,则由于密码不匹配,webservice和active directory之间的身份验证将强制锁定帐户。从我的角度来看,IBM Web服务没有正确地对密码字符串进行URL解码,只要不需要对字符进行URL编码,这就没有问题…

如果所需的字符是唯一允许的字符,只需将最后一个
替换为
[0-9a-zA-Z*...-]

^(?=.*[0-9])(?=.*[*_!.()-])(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z*_!.()-]{8,}$

此外,我建议从lookaheads中删除不必要的限制性量词和组,因为它们没有任何区别。

这里允许除换行符以外的所有字符:
{8,}
。有了lookaheads,你只需要有东西在场。允许哪些字符?如果您不允许使用
%
,请将
{8,}
替换为
[^%]{8,}
。上面列出了唯一允许的特殊字符:•至少一个特殊字符为:“*。”(-”,或者换句话说:必须禁止使用所有其他字符。但是,由于我没有控制权,最终用户将拥有哪种键盘布局,所以通过像[^%$§“'.+~+.-,;:?\{/}][µ^}这样反转的合并只是一个开始-——如果所需的字符是唯一允许的字符,为什么不使用
^(?=.[0-9])(?=.[*.-](?=.[a-z])(?=.[a-z])(?=.[a-z])[0-9a-zA-z.*.-][8、]$
?这似乎有效。谢谢。我不知道第二个显式块[0-9a-zA-Z*..*。()-]{8,}