正则表达式求助

2021-02-27 01:14:00 +08:00
 LeeReamond

如题,网站注册密码的要求,我记得是能通过一行正则表达式实现的,但是我比较菜不会写,同时又忘了之前在哪里看到正确版本了。。。烦请有缘人解惑一段神秘代码

要求:实现一段正则表达式匹配以下条件的字符串:

===================

以上是基础需求,我印象中正则表达式是能实现的。

还有一个进阶需求是仅允许匹配 ascii128 以内的可读范围,即密码中不要出现什么中文之类的特殊符号,这个不知道能不能加入上述正则表达式里。

960 次点击
所在节点    问与答
3 条回复
witfun
2021-02-27 01:57:03 +08:00
(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{7,15}$
这个么?网上随便搜了一个
LeeReamond
2021-02-27 01:59:07 +08:00
@witfun 感谢,自己搜到了
'^' # begin string
'(?=.*?[A-Z])' # at least one uppercase letter
'(?=.*?[a-z])' # at least one lowercase letter
'(?=.*?\d)' # at least one digit
'(?=.*?[!@#$%^&*?])' # at least one special character
'[A-Za-z\d!@#$%^&*?]' # only the given characters
'{8,20}' # between 8 and 20 characters long
'$' # end string
Sunyanzi
2021-02-27 02:34:12 +08:00
不知道你是什么语言的正则 ... 我写个通用的给你 ...

通常情况下像这类需求都是放一堆前瞻 ... 我估计你见过的正确版本也是这样 ...

但对密码而言我个人更喜欢反着写 ... 如下 ...

/^(.{0,7}|[^A-Z]*|[^a-z]*|[^0-9]*|[a-zA-Z0-9]*)$|[^\x20-\x7E]+/

这种写法的好处是看起来更清晰而且更短 ... 执行效率理论上也更高一些 ...

前面的五项我是按照你给的顺序写的 ... 后面控制了字符范围是 ASCII 32 ~ 127 ... 从空格开始 ...

需要注意的是这个正则匹配的是所有不合法的密码 ... 只有不匹配才说明字符串满足你的需求 ...

如果你非要正写的版本我也能写 ... 打出来费点劲罢了 ...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/756654

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX