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

Regex for password complexity regarding safe ascii characters for URLEncode

我正在根据以下要求进行密码检查:

最少8个字符,其中必须包含:

字符是否连续应该无关紧要

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

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

但是我无法 "allow only" 指定的特殊字符集。例如。 "Sample!1234" 匹配,但 "Sa%mple!123" 也匹配 - 由于不允许的特殊字符“%”,在所有情况下都必须失败,如果有任何其他允许的特殊字符则无关紧要。我认为问题出在考虑任何字符的点量词上,我还没有解决这个问题...

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

如果这些字符是唯一允许的字符,只需将最后一个 . 替换为 [0-9a-zA-Z*_!.()-]:

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

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