java - 为什么输入必须接受的字符时会产生错误?

标签 java regex input

我正在 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/

相关文章:

php - PHP中的正则表达式过滤@name或@name.lastname

javascript - 使用文本框输入范围

java - 循环遍历结果集以按组生成平均值

Eclipse 中的 Java 7 JVM 验证错误

java - SOA环境下webapp的实时数据管理(远程后端)

javascript - 样式化输入类型 ="file"

html - 如何在&lt;input type ="file"/>中显示文件路径?

java - 将 String 转换为任何所需类的通用代码

c# - 仅用一个换行符替换多个换行符

html - 匹配 CSS 规则的正则表达式