模式不允许包含数字的单词?

时间:2019-05-13 15:29:02

标签: java regex pattern-matching

我写了一个程序,可以添加类别,因为它在第一个位置上存在特殊字符和数字的问题,所以我制作了一个regex过滤器,该过滤器只应处理特殊字符。但是,如果我现在使用包含数字的单词,由于某种原因,该方法也会返回true。

private boolean containsSpecChar () {
  Pattern pattern = Pattern.compile("[a-zA-Z0-9]");
  Pattern p = Pattern.compile("[0-9a-zA-Z]");
  String a = null;
  a = txtInKategorieName.getText();
  Matcher match= pattern.matcher(a);
  Matcher m = p.matcher(a);
  if (
  match.matches() || m.matches()
  )
  {
    return false;
  }
  else
  {
    return true;
  }
}

我也希望能够使用包含数字的单词。 谢谢

3 个答案:

答案 0 :(得分:2)

[a-zA-Z0-9][0-9a-zA-Z]是同一件事。

[xxx]正则表达式模式是character class,它与单个字符匹配。如果要匹配这些字符中的一个或多个,则需要在末尾添加+ quantifier

"[a-zA-Z0-9]+"

答案 1 :(得分:1)

如果只希望包含字母和/或数字的单词为true,请使用[a-zA-Z0-9]+作为模式。

答案 2 :(得分:0)

这是.matches的方式:

public static boolean containsSpecChar () {
  Pattern pattern = Pattern.compile("[a-zA-Z0-9]+");
  String a = txtInKategorieName.getText();
  Matcher match = pattern.matcher(a);

  return !match.matches();
}

这是.find的方式:

public static boolean containsSpecChar () {
  Pattern pattern = Pattern.compile("[^a-zA-Z0-9]");
  String a = txtInKategorieName.getText();
  Matcher match = pattern.matcher(a);

  return match.find();
}