如题,网站注册密码的要求,我记得是能通过一行正则表达式实现的,但是我比较菜不会写,同时又忘了之前在哪里看到正确版本了。。。烦请有缘人解惑一段神秘代码
要求:实现一段正则表达式匹配以下条件的字符串:
===================
以上是基础需求,我印象中正则表达式是能实现的。
还有一个进阶需求是仅允许匹配 ascii128 以内的可读范围,即密码中不要出现什么中文之类的特殊符号,这个不知道能不能加入上述正则表达式里。
1
witfun 2021-02-27 01:57:03 +08:00 via Android
(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{7,15}$
这个么?网上随便搜了一个 |
2
LeeReamond OP @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 |
3
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 ... 从空格开始 ... 需要注意的是这个正则匹配的是所有不合法的密码 ... 只有不匹配才说明字符串满足你的需求 ... 如果你非要正写的版本我也能写 ... 打出来费点劲罢了 ... |