首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在regex中下划线不验证

在regex中下划线不验证
EN

Stack Overflow用户
提问于 2022-10-05 17:04:36
回答 3查看 125关注 0票数 0

如何添加下划线作为正则字符串的一部分。

这是我的字符串,用于检查大写、小写、数字和特殊字符。其余的特殊角色都能工作。验证不适用于下划线。

代码语言:javascript
运行
复制
 @"^[^\s](?=(.*[A-Za-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?=(.*[!@#$%^&*()-+=\[{\]};:<>|_.\\/?,\-`'""~]{1,})).*[^\s]$"

有什么想法吗?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2022-10-05 18:15:53

这是AWS Cogito使用的正则表达式,它应该适用于您的情况:

代码语言:javascript
运行
复制
@"^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[\^$*.\[\]{}\(\)?\-“!@#%&\/,><’:;|_~`])\S{8,99}$"

您可以在http://regexstorm.net上检查regexes,它比每次构建应用程序都要快。

票数 3
EN

Stack Overflow用户

发布于 2022-10-05 17:54:09

我以这样的方式对待它:我接受了你的要求,并把它们分成了不同的正面观点:

检查:

  • 大写(?=.*[A-Z])
  • 小写(?=.*[a-z]) (请注意,我将A-Za-z分成了不同的组)
  • 数字(?=.*\d)
  • 特殊字符(?=.*[!@#$%^&*()-+=\[{\]};:<>|_.\\/?,\-`'""~])

然后,您可以按任何顺序组合它们,我按照上面列出的顺序组合它们,并使用^将其锚定在行的开头。不要在需求中的组之前、中间或之后添加任何可能导致regex强制执行组的特定顺序的额外匹配:

  • 对任何非单词字符\W的展望使得不可能匹配Underscore1_,因为它只匹配“除字母、数字或下划线之外的任何东西”--这是Underscore1_包含的所有内容。
  • 消耗一个字符的起始[^\s] (和结束[^\s])可能会破坏许多良好的匹配。Underscore1__1scoreUnder不重要,但是如果您从_开始并像使用[^\s]一样使用它,则后面对特殊字符的展望将失败(除非密码中有第二个特殊字符)。
代码语言:javascript
运行
复制
@"^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*()-+=\[{\]};:<>|_.\\/?,\-`'""~])"

如果您的最小长度要求为7个字符,则只需将.{7,}$添加到正则表达式的末尾即可:

代码语言:javascript
运行
复制
@"^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*()-+=\[{\]};:<>|_.\\/?,\-`'""~]).{7,}$"

如果没有最小长度,来自每个组的一个字符的密码就足够了,而且由于有4个组,只有4个字符的密码将通过筛选器。

我认为没有必要在正则表达式中设置一个长度上限。如果用户界面接受了一个长度为数千个字符的字符串,那么为什么拒绝它太长呢?您存储的内容的长度可能会更小,因为您将存储bcrypt/scrypt/argon2/...编码密码。

建议:还在特殊字符列表中添加空格(甚至空格)。

票数 2
EN

Stack Overflow用户

发布于 2022-10-05 19:37:24

在regexp中,在第三捕获组regex101中添加下划线

代码语言:javascript
运行
复制
@"^[^\s](?=(.*[A-Za-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W_]){1,})(?=(.*[!@#$%^&*()-+=\[{\]};:<>|_.\\/?,\-`'""~]{1,})).*[^\s]$"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73963923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档