我试图召唤一个正则表达式来验证给定的密码是否包含: 1.大写字母 2.小写字符 一个数字 4.至少8个字符
我找到了以下正则表达式来定义这样的约束:
localhost/index.php?url=localhost/index.php/whatever_came_after
不幸的是,我只局限于使用java的org.apache.regexp.RE类的遗留系统。
没有预见,我能够将规则1-3定义为以下正则表达式:
RE r = new RE("^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d$@$!%*#?&]{8,}$");
但我不知道如何在不使用“?=”元字符的情况下将length参数添加到此字符串。
尝试编译“(?= ...)”失败,出现以下错误:
RE r = new RE("^(((.*([A-Z]+).*([0-9]+).*|.*([0-9]+).*([A-Z]+)).*)$)")
我的问题: RE类中存在“前瞻”吗? 如果没有,我如何在RE类regex中实现“AND”运算符?
谢谢!
答案 0 :(得分:0)
您列出的第二个表达式仅测试4个条件中的2个。它只查找大写和数字。
我可以想到几种方法来做到这一点。
首先,有六种不同的大写,小写和数字组合。
使用两个正则表达式。第一个表达式将验证字符串中是否至少有一个字符类型。它有点长,因为它会寻找六种组合中的每一种。
^.*?(?:[A-Z]+.*?[a-z]+.*?[0-9]|[A-Z]+.*?[0-9]+.*?[a-z]|[a-z]+.*?[A-Z]+.*?[0-9]|[a-z]+.*?[0-9]+.*?[A-Z]|[0-9]+.*?[a-z]+.*?[A-Z]|[0-9]+.*?[A-Z]+.*?[a-z])
第二个测试可以是正则表达式或字符串长度测试。正则表达式看起来像:
^.{8,}
将构建一个更复杂的正则表达式,它将测试每个位置中所有不同的大写,小写和数字组合。这个正则表达式自然是巨大的。