Шаблон не допускает слова, включая цифры? - PullRequest
1 голос
/ 13 мая 2019

Я написал программу, которая позволяет мне добавлять категории, поскольку у нее были некоторые проблемы со специальными символами и числами на первой позиции, я создал фильтр регулярных выражений, который должен заботиться только о специальных символах. Однако, если я сейчас использую слово, которое включает число, метод также по какой-то причине возвращает 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 ]

2 голосов
/ 13 мая 2019

[a-zA-Z0-9] и [0-9a-zA-Z] - это одно и то же.

Шаблон регулярного выражения [xxx] представляет собой класс символов , который соответствует одиночному символу. Если вы хотите сопоставить одному или нескольким из этих символов, вам необходимо добавить + квантификатор в конце:

"[a-zA-Z0-9]+"
1 голос
/ 13 мая 2019

Если вы хотите использовать значение true только для слов, содержащих буквы и или цифры, используйте [a-zA-Z0-9]+ в качестве шаблона.

0 голосов
/ 13 мая 2019

Вот способ .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();
}
...