Regard Regex и компиляция шаблонов в Java - PullRequest
1 голос
/ 27 декабря 2011

Пожалуйста, дайте мне код в регулярном выражении для проверки пароля в Java, который должен состоять из одного символа Caps, одного целого числа, одного следующего символа (@, #, $,%, ^, &, +, =) и маленьких символов.

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

На самом деле у меня уже есть одно регулярное выражение, которое оценивает все условия в javascript. Я не могу использовать его в Java. Я пытался сбежать \. Его тоже не работает.

Вот мой код:

    Pattern pattern = Pattern.compile("/.*(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/");
    Matcher matcher = pattern.matcher("Aa@1");
    if(matcher.matches()){
        System.out.println("Matched");
    }
    else{
        System.out.println("No mat");
    }

Исходное регулярное выражение javascript

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

В этом \d дал мне ошибку из-за экранирующего символа. Итак, я добавил еще \ до этого в версии Java.

Я не могу понять, что происходит не так.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 27 декабря 2011

Вы были почти там, но вы пропустили несколько деталей:

Во-первых, отправная точка плохая - это регулярное выражение JavaScript ужасно. Вместо

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

используйте это:

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

Затем, чтобы перевести регулярное выражение в Java, вам нужно удалить разделители (и использовать вместо них кавычки, а не дополнительно, как вы) и удвоить обратную косую черту (как вы уже сделали):

Pattern pattern = Pattern.compile("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).{6,}$");

Теперь это должно работать.

1 голос
/ 27 декабря 2011

Вам не нужны / в Java. Это на самом деле будет совпадать с косой чертой. Кроме того, ведущий .* бесполезен (хотя это не повлияет на результат).

Pattern pattern = Pattern.compile("(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$");
...