Почему генерируется ошибка, когда вводится символ, который должен быть принят? - PullRequest
1 голос
/ 26 декабря 2011

Я использую регулярные выражения в Java для проверки ввода поля пароля. Ниже приведен код для проверки пароля:

final Pattern check = Pattern.compile( "^[a-z0-9A-Z!$%*()-_[]{};:@#<>,./?\\|]+$");

if (!check.matcher(password).matches()) {
    errors.put("password", "Invalid input");
}

Когда я отправляю ввод, содержащий символы, например%, генерируется следующее исключение:

исключение

java.util.regex.PatternSyntaxException: незакрытый символьный класс рядом index 37 ^ [a-z0-9A-Z! $% * () -_ [] {};: @ # <>,. /? \ |] + $ ^

Я уже использовал другие выражения регулярных выражений в этом же коде, и они прекрасно работают ... Только эта часть доставляет мне проблемы.

Кто-нибудь из вас может знать причину этой ошибки?

Заранее спасибо за помощь!

Ответы [ 3 ]

2 голосов
/ 26 декабря 2011

У вашего класса персонажа есть две проблемы:

  • вы не избежите ] в нем,
  • - делает его неоднозначным.1009 *

    Более того, Java также требует от вас экранирования [ (другие движки регулярных выражений этого не требуют):

    Вы должны написать его так:

    final Pattern check = Pattern.compile("^[-a-z0-9A-Z!$%*()_\\[\\]{};:@#<>,./?\\\\|]+$");
    
1 голос
/ 26 декабря 2011

Я думаю, тебе стоит сбежать от некоторых из этих персонажей? По крайней мере, скобки, так как вы используете их, чтобы начать свой класс персонажа.

0 голосов
/ 26 декабря 2011

Возможно, это связано с копированием, но регулярное выражение пропускает некоторые обратные слэши:

^[a-z0-9A-Z\\!\\$%\\*\\(\\)\\-_\\[\\]\\{\\};:@#<>,\\./\\?\\|]+$

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

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