我开发了以下正则表达式,试图匹配至少有一个数字和至少一个小写字符的字符串。
(?=.*[a-z])(?=.*\d)
这似乎工作正常。例如,它匹配'abc3'而不是'abc'
但是,只要我通过添加字符串锚点的开头和结尾来修改正则表达式,它就会停止工作。你知道为什么吗?
^(?=.*[a-z])(?=.*\d)$
答案 0 :(得分:2)
$
正在终止匹配。所以你基本上测试的是小写字符和数字(是好的)。由于预测的宽度为零,因此检查的当前位置不会发生变化(默认情况下由于^
而在此处启动)。
检查小写和数字后,你基本上留下^$
正则表达式,它匹配空字符串(记住匹配的位置没有改变因为前瞻的零宽度属性 的)。
这与您的要求相矛盾(因为已经存在小写字符和数字。因此字符串永远不会为空。这会导致正则表达式失败)
你必须使用
^(?=.*[a-z])(?=.*\d).*$