我的正则表达式或循环语句出了什么问题?我需要8个字符组合,一个数字,一个字母大写,一个小写最小。 但我得到一个不停的循环。
items.sort(function (a, b) {
return a.score - b.score;
});
答案 0 :(得分:0)
问题是Java matches()
必须匹配整个字符串才能返回true
,因此您的循环条件将始终为真(输入可以&#39 ; t所有数字和所有字母)。
有两种方法可以解决您的问题:
1)将.*
添加到正则表达式的每一端:
if (!out.matches(".*[0-9].*") | !out.matches(".*[a-z].*") | !out.matches(".*[A-Z].*"))
2)使用一个虽然更复杂的正则表达式:
if (!out.matches("(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8}"))
最后一个选项还会检查长度是否为8。
另请注意,您不需要^
或$
matches()
- 合同暗示了这些内容。
答案 1 :(得分:0)
有几件事:
正则表达式不一定是表达此类约束的最佳方式。在计算每种字符类型的出现次数时,只需一次查看密码就可以解决这个问题。
您使用的是二进制[AVAlexSpeechSynthesisVoice 0x1700150d0] Language: en-US, Name: Alex, Quality: Enhanced [com.apple.speech.voice.Alex]
(OR
)而不是逻辑|
(OR
)。对于布尔语,它的行为会相同,但你几乎肯定没有故意这样做。
正则表达式结束时的美元意味着字符串结尾。你并不关心角色是在字符串的开头,中间还是末尾,你只想让它某处。
||
尝试匹配整个字符串。您的代码可以使用matches
代替,也可以在每个正则表达式的两端添加find
。