有人可以给我正则表达式来匹配有效的 AWS Cognito 密码 - 包含数字、特殊字符(其列表)、小写和大写字母
AWS Cognito 默认长度限制为 6 个字符,并且有自己的特殊字符列表
/^(?!\s+)(?!.*\s+$)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[$^*.[\]{}()?"!@#%&/\\,><':;|_~`=+\- ])[A-Za-z0-9$^*.[\]{}()?"!@#%&/\\,><':;|_~`=+\- ]{8,256}$/
/
表示正则表达式的开始。^
开始。匹配字符串的开头。(?!\s+)
不允许出现前导空格。(?!.*\s+$)
不允许尾随空格。(?=.*[a-z])
需要小写字母。(?=.*[A-Z])
需要大写字母。(?=.*[0-9])
需要数字。(?=.*[\^$*.[\]{}()?"!@#%&/\\,><':;|_~`=+\- ])
需要指定集中至少一个特殊字符。 (非前导、非尾随空格字符也被视为特殊字符。)[A-Za-z0-9^$*.[\]{}()?"!@#%&/\\,><':;|_~`=+\- ]{8,256}
允许的字符集中最少 8 个字符,最多 256 个字符。$
结束。匹配字符串的结尾。/
表示正则表达式的结束。最小字符限制默认为 8,但可以自定义为 6 到 99 之间的值。但是,密码的完整长度限制为 256 个字符(而不是 99)。
https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-policies.html
Cognito 在默认密码要求中也有“无前导或尾随空格”规则,但有几个文档错误地指出“空格字符也被视为特殊字符”。然而,当前的行为实际上是“非前导、非尾随空格字符也被视为特殊字符”。
要查看正确的默认密码规则,请查看用户池,单击“登录体验”选项卡,然后单击“包含至少 1 个特殊字符”以显示包含规则的工具提示。
Swift 5 的正则表达式公式是
"(.*[()!@^$*.?\\-@#%&\":;|><'_~`+=\\[\\],{}])"
这些是基于 AWS 控制台设置和当前 Cognito 文档的默认要求:
1 文档中没有指定对阿拉伯数字的限制,但我实验发现其他 Unicode 数字不计入此要求
2 接受的答案将允许的字符限制为“必需”的字符,但是允许的字符数多于所需的字符数。 Cognito 文档 表示:“Amazon Cognito 验证密码包含所需的最少字符后,您的用户密码可以包含 任何类型的其他字符,最多可达最大密码长度。” Cognito 对以下密码非常满意,例如:Ab!~1 🤢℉”•—”†„简体字
。
/^(?!\s+)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\^$*.[\]{}()?"!@#%&/\\,><':;|_~`=+-]).{8,256}(?<!\s)$/
说明:
^(?!\s+)
(?=.*[A-Z])
(?=.*[a-z])
(?=.*[0-9])
(?=.*[\^$*.[\]{}()?"!@#%&/\\,><':;|_~`=+-])
Cognito 文档)< ' : ; | _ ~ ` + = (listed in the same order as in the
.
(?<!\s)$