java - 排除 Java 正则表达式中带有正斜杠的单词

标签 java regex

我试图仅允许某些单词通过 Java 中的正则表达式过滤器,即:

Pattern p = Pattern.compile("^[a-zA-Z0-9\\s\\.-_]{1," + s.length() + "}$");

但我发现它允许通过 140 公里/小时,因为未处理正斜杠。理想情况下,不应允许使用该词。

有人可以建议修复我当前的版本吗?

我是正则表达式的新手,还没有完全理解它。

正则表达式位于 utils 类方法中,如下所示:

public static boolean checkStringAlphaNumericChars(String s) {
   s = s.trim();
   if ((s == null) || (s.equals(""))) {
        return false;
   }

   Pattern p = Pattern.compile("^[a-zA-Z0-9\\s\\.-_]{1," + s.length() + "}$");
   // Pattern p = Pattern.compile("^[a-zA-Z0-9_\\s]{1," + s.length() + "}");
   Matcher m = p.matcher(s);
   if (m.matches()) {
       return true;
   }
   else {
       return false;
   }
}

我想允许带有下划线、空格、句点、减号的字符串。并确保接受包含字母数字(如 123.45 或 -500.00)的字符串,但不接受 5,000.00。

最佳答案

是否因为连字符在字符集中是倒数第二个,因此定义了从 '.''_' 的范围,这包括'/'

试试这个:

Pattern p = Pattern.compile("^[a-zA-Z0-9\\s\\._-]$");

此外,NullUserException 是正确的,因为不需要 {1,"+ s.length() + "}。事实上,您的表达式以 '^' 开始并以 '$' 结束,这将确保整个字符串被消耗。

最后,您可以使用 \w 代替 [a-zA-Z_0-9],将表达式简化为 "^[\\w\\s\\.-]$"

关于java - 排除 Java 正则表达式中带有正斜杠的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7215542/

相关文章:

java - 从图中的文本文件读取节点数

regex - Redis - 获取与正则表达式匹配的键值

regex - 使用正则表达式的条件子表达式替换

php - 删除标签内的空白而不删除\n

java - 我的 Swing 应用程序有什么问题?

java - 图书馆的优势

java - Maven 不读取应用程序属性文件

java - Mysql 更新不适用于变量

javascript - 使用正则表达式的URL “starts with”?

Java 正则表达式 : Remove Everything After Last Instance Of Character