为什么以下返回true?
Pattern.compile("(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.{8,12})").matcher("passworD12345678").find();
Run Code Online (Sandbox Code Playgroud)
它不应该(?=.{8,12})因为它的长度超出范围而失败吗?
Psh*_*emo 11
find()不检查整个字符串是否可以由正则表达式匹配matches().find只是试图找到可以由正则表达式匹配的任何子字符串.同时(?=.{8,12})检查后面是否有8到12个字符的地方.因此,要么在正则表达式中添加锚点 ^ $,表示字符串的开头和结尾
Pattern.compile("^(?=.*[A-Z])"
+ "(?=.*[a-z])"
+ "(?=.*[0-9])"
+ "(?=.{8,12}$)").matcher("passworD12345678").find();
Run Code Online (Sandbox Code Playgroud)
或使用matches()此正则表达式
Pattern.compile("(?=.*[A-Z])"
+ "(?=.*[a-z])"
+ "(?=.*[0-9])"
+ ".{8,12}").matcher("passworD12345678").matches();
// ^^^^^^^ we can't use look-ahead because we need some part of regex
// which will let regex consume all characters from string
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
315 次 |
| 最近记录: |