素材牛VIP会员
java正则表达式问题?
 这***3  分类:Java代码  人气:1088  回帖:6  发布于6年前 收藏

用正则表达式构造匹配:

  1. 密码必须由数字、字符、特殊字符三种同时存在组成;

  2. 密码长度不能少于8个字符;

 标签:java

讨论这个帖子(6)垃圾回帖将一律封号处理……

Lv1 新人
km***04 JS工程师 6年前#1

验证了下, @菩提旭光 的回答是不正确的, 例如hello123就能匹配, 但并不满足要求. 而且 8个空格也能匹配, 但并不满足要求, 你也没办法把所有特殊符号都添加进去.

虽然可以加入(?=[a-zA-Z0-9_#@]+)来保证密码不会包含除指定外的特殊符号, 但仍然无法保证它必须有三种符号.

不全是数字/字母/特殊符号, 结果是只要包含2种以上符号即可.

事实上, 这不是一个正则的问题, 参考相似问题

Lv6 码匠
旧**** 软件测试工程师 6年前#2

把6种情况都列一遍

Lv3 码奴
贝***0 页面重构设计 6年前#3
(?!^\\d+$)不能全是数字
(?!^[a-zA-Z]+$)不能全是字母
(?!^[_#@]+$)不能全是符号(这里只列出了部分符号,可自己增加,有的符号可能需要转义)
.{8,}长度不能少于8位
合起来就是
(?!^\\d+$)(?!^[a-zA-Z]+$)(?!^[_#@]+$).{8,}
Lv6 码匠
ga***23 产品经理 6年前#4

我觉得这个问题不应该用正则表达式来解决,每种工具都有非常适合使用的场景,我觉得在你这个场景里面并不适合用正则表达式去解决,用简单的if语句去判断,实现简单,而且可读性非常好,为什么一定要用正则表达式呢!?

Lv4 码徒
阿***c 产品经理 6年前#5

@菩提旭光 的思路是对的,把negative lookahead换成positive lookahead,再稍微调整一下就行了。
(?=.\d.)(?=.[a-zA-Z].)(?=.[_#@].).{8,}

Lv6 码匠
Fo***ou 职业无 6年前#6
var regex = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,30}');
console.log(regex.test('a12345-7'));

答案来自: https://q.cnblogs.com/q/67124/

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取