我正在 Java 中使用正则表达式来检查密码字段的输入。以下是检查密码的代码:
final Pattern check = Pattern.compile( "^[a-z0-9A-Z!$%*()-_[]{};:@#<>,./?\\|]+$");
if (!check.matcher(password).matches()) {
errors.put("password", "Invalid input");
}
当我提交包含符号(例如 %)的输入时,会生成以下异常:
exception
java.util.regex.PatternSyntaxException: Unclosed character class near index 37 ^[a-z0-9A-Z!$%*()-_[]{};:@#<>,./?\|]+$ ^
我已经在同一代码中使用了其他正则表达式,并且它们工作正常......只有这部分给我带来了麻烦。
你们中有人知道这个错误的原因吗?
提前感谢您的帮助!
最佳答案
您的角色类有两个问题:
- 你无法转义其中的
]
, -
位置使其不明确。
此外,Java 还要求您转义 [
(其他正则表达式引擎不会要求这样做):
你应该这样写:
final Pattern check = Pattern.compile("^[-a-z0-9A-Z!$%*()_\\[\\]{};:@#<>,./?\\\\|]+$");
关于java - 为什么输入必须接受的字符时会产生错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8631645/