确保使用Matcher.matches()
方法,该方法断言整个字符串与模式匹配。
您当前的正则表达式:
"((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])|(?=.*[\\d~!@#$%^&*\\(\\)_+\\{\\}\\[\\]\\?<>|_]).{6,50})"
方法:
- 字符串必须至少包含一个数字
(?=.*\\d)
、一个小写英文字母(?=.*[a-z])
和一个大写字符。(?=.*[A-Z])
- 或
|
字符串必须至少包含 1 个字符,可以是数字或特殊字符(?=.*[\\d~!@#$%^&*\\(\\)_+\\{\\}\\[\\]\\?<>|_])
- 上述任一条件均成立,并且字符串长度必须介于 6 到 50 个字符之间,并且不包含任何行分隔符。
正确的正则表达式是:
"(?=.*[a-zA-Z])(?=.*[\\d~!@#$%^&*()_+{}\\[\\]?<>|]).{6,50}"
这将检查:
- 字符串必须包含一个英文字母字符(大写或小写)
(?=.*[a-zA-Z])
,以及一个可以是数字或特殊字符的字符(?=.*[\\d~!@#$%^&*()_+{}\\[\\]?<>|])
- 该字符串必须介于 6 到 50 个字符之间,并且不包含任何行分隔符。
请注意,我删除了大多数字符的转义,除了[]
, 因为{}?()
在字符类中失去了它们的特殊含义。