Исключить слова с косой чертой в регулярном выражении Java - PullRequest
0 голосов
/ 27 августа 2011

Я пытаюсь разрешить только определенные слова через фильтр регулярных выражений в Java, например:

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

Но я считаю, что это разрешает проходить через 140 км / ч, поскольку косая черта не обрабатывается.В идеале, это слово не должно быть разрешено.

Может кто-нибудь предложить исправление к моей текущей версии?

Я новичок в regexp и пока не особо следую ему.

Регулярное выражение находится в методе класса 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 - нет.

Ответы [ 2 ]

4 голосов
/ 27 августа 2011

Это потому, что дефис является последним в вашем наборе символов и поэтому определяет диапазон от '.' до '_', который включает '/'?

Попробуйте это:

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

Кроме того, NullUserException является правильным в том, что нет необходимости в {1," + s.length() + "}. Тот факт, что вы начинаете выражение с '^' и заканчиваете его '$', гарантирует, что вся строка будет использована.

Наконец, вы можете использовать \w вместо [a-zA-Z_0-9], упрощая ваше выражение до "^[\\w\\s\\.-]$"

1 голос
/ 27 августа 2011

Вы можете просто использовать

public static boolean checkStringAlphaNumericChars(String s) { 
    return (s != null) && s.matches("[\\w\\s.-]+"); 
}
  • Проверка короткого замыкания на ноль гарантирует, что s не null, когда вы попытаетесь выполнить .matches() для него.* Использование \w для поиска буквенно-цифровых символов и подчеркивания.tchrist также будет первым, кто укажет, что это более правильно, чем [A-Za-z0-9_]
  • . + в самом конце гарантирует, что у вас есть хотя бы один символ (т.е. строка не пуста)
  • Нет необходимости использовать ^ и $, поскольку .matches() пытается сопоставить шаблон с целой строкой.
  • Также нет необходимости экранировать точку (.) вкласс персонажей.

Новая демоверсия: http://ideone.com/qraob

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...