如何添加下划线作为正则字符串的一部分。
这是我的字符串,用于检查大写、小写、数字和特殊字符。其余的特殊角色都能工作。验证不适用于下划线。
@"^[^\s](?=(.*[A-Za-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?=(.*[!@#$%^&*()-+=\[{\]};:<>|_.\\/?,\-`'""~]{1,})).*[^\s]$"
有什么想法吗?
谢谢
发布于 2022-10-05 10:15:53
这是AWS Cogito使用的正则表达式,它应该适用于您的情况:
@"^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[\^$*.\[\]{}\(\)?\-“!@#%&\/,><’:;|_~`])\S{8,99}$"
您可以在http://regexstorm.net上检查regexes,它比每次构建应用程序都要快。
发布于 2022-10-05 09:54:09
我以这样的方式对待它:我接受了你的要求,并把它们分成了不同的正面观点:
检查:
(?=.*[A-Z])
(?=.*[a-z])
(请注意,我将A-Z
和a-z
分成了不同的组)(?=.*\d)
(?=.*[!@#$%^&*()-+=\[{\]};:<>|_.\\/?,\-`'""~])
然后,您可以按任何顺序组合它们,我按照上面列出的顺序组合它们,并使用^
将其锚定在行的开头。不要在需求中的组之前、中间或之后添加任何可能导致regex强制执行组的特定顺序的额外匹配:
\W
的展望使得不可能匹配Underscore1_
,因为它只匹配“除字母、数字或下划线之外的任何东西”--这是Underscore1_
包含的所有内容。[^\s]
(和结束[^\s]
)可能会破坏许多良好的匹配。Underscore1_
或_1scoreUnder
不重要,但是如果您从_
开始并像使用[^\s]
一样使用它,则后面对特殊字符的展望将失败(除非密码中有第二个特殊字符)。@"^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*()-+=\[{\]};:<>|_.\\/?,\-`'""~])"
如果您的最小长度要求为7个字符,则只需将.{7,}$
添加到正则表达式的末尾即可:
@"^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*()-+=\[{\]};:<>|_.\\/?,\-`'""~]).{7,}$"
如果没有最小长度,来自每个组的一个字符的密码就足够了,而且由于有4个组,只有4个字符的密码将通过筛选器。
我认为没有必要在正则表达式中设置一个长度上限。如果用户界面接受了一个长度为数千个字符的字符串,那么为什么拒绝它太长呢?您存储的内容的长度可能会更小,因为您将存储bcrypt
/scrypt
/argon2
/...
编码密码。
建议:还在特殊字符列表中添加空格(甚至空格)。
发布于 2022-10-05 11:37:24
在regexp中,在第三捕获组regex101中添加下划线
@"^[^\s](?=(.*[A-Za-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W_]){1,})(?=(.*[!@#$%^&*()-+=\[{\]};:<>|_.\\/?,\-`'""~]{1,})).*[^\s]$"
https://stackoverflow.com/questions/73963923
复制相似问题