Неверная escape-последовательность \ d - PullRequest
13 голосов
/ 15 июля 2011

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

я пытаюсь это:

if(!password.matches("(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])")){
        username = "Error";
    }

но выведите мне ошибку, говорящую: недопустимая escape-последовательность.

Кто-то может помочь мне решить проблему и подтвердить, что это правильный шаблон?

Спасибо, но я не делаю ошибку, но она не совпадает со строкой, такой как Павел% 88, почему?

Ответы [ 2 ]

38 голосов
/ 15 июля 2011

Java будет обрабатывать \ внутри строки как начало escape-последовательности . Убедитесь, что вы используете \\ вместо этого (чтобы вы получили действительный символ \ в строке), и все будет в порядке.

Быстрое обновление : Как отмечает Этьен, если вы действительно хотите \ в самом RegEx, вам нужно будет использовать \\\\, так как это приведет к \\ в строке , который будет производить \ в RegEx.

Новое обновление вопроса: Вы упоминаете, что ваш RegEx не работает, и я уверен, что это потому, что это неправильно. Если вы просто хотите убедиться, что присутствует один из классов символов каждого типа, вы можете просто создать по одному RegEx для каждого класса, а затем проверить пароль для каждого из них. Пароли в значительной степени гарантированно будут короткими (и вы можете сами это контролировать), поэтому хит перфекта должен быть минимальным.

2 голосов
/ 15 июля 2011

Я использовал это, чтобы быстро проверить это: http://www.regexplanet.com/simple/index.html

Похоже, это работает, если вы положите. * В конце. Я полагаю, что вам нужно включить регулярное выражение, не требующее предварительного просмотра.

Вот все регулярное выражение:

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*

Конечно, в вашем Java-коде вы должны избегать обратной косой черты, как уже упоминалось.

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