Использование регулярного выражения для проверки пароля

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

^.*(?=.{6,20})(?=.*[a-z].*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$

Когда я пытаюсь использовать то же самое в xml, что и

^.\*(\?=.{6,20})(\?=.\*[a-z].\*[a-z])(\?=.\*[A-Z])(\?=.\*[0-9]).\*$ 

Это не работает. Это показывает исключение, как показано ниже.

java.lang.IllegalArgumentException: cvc-pattern-valid: значение 'narendra1A' не является допустимым по отношению к шаблону '^.*(\?=.{6,20})(\?=.*[a-z]. *[a-z])(\?=.*[A-Z])(\?=.*[0-9]).*$' для типа '#AnonType_passwordcreateUser'.

Может ли кто-нибудь помочь в этом отношении.

Спасибо,

Нарендра


person Narendra    schedule 08.12.2010    source источник
comment
Не имеет отношения к вопросу, но вы должны удалить первый .* сразу после ^. Это не нужно и делает ваше регулярное выражение очень неэффективным. Кроме того, если вы думаете, что ограничиваете длину пароля 6-20 символами, это не так. Строка из 100 символов прекрасно пройдет это регулярное выражение.   -  person Tim Pietzcker    schedule 08.12.2010
comment
Почему существует верхний предел в 20 символов?   -  person Gumbo    schedule 08.12.2010
comment
@Gumbo: не имеет значения, любая строка длиннее 5 символов будет пройдена, если вы внимательно посмотрите на регулярное выражение :)   -  person Tim Pietzcker    schedule 08.12.2010


Ответы (4)


Это не дает прямого ответа на ваш вопрос, но может быть для вас лучшим вариантом, чем попытки проверки качества пароля с помощью регулярных выражений.

Библиотека vt-password — это превосходная библиотека Java, реализующая проверка качества пароля. В дополнение к подсчету символов/классов символов он выполняет такие действия, как проверка словарей, проверка паролей, использованных ранее, проверка повторяющихся символов и т. д.

(Если вы используете Spring, довольно просто настроить объекты правила пароля в XML-файле связывания Spring. Это позволяет настраивать правила без изменения кода.)

person Stephen C    schedule 08.12.2010

Шаблон регулярного выражения пароля

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

Описание

(           # Start of group
  (?=.*\d)      #   must contains one digit from 0-9
  (?=.*[a-z])   #   must contains one lowercase characters
  (?=.*[A-Z])   #   must contains one uppercase characters
  (?=.*[@#$%])  #   must contains one special symbols in the list "@#$%"
     .          #     match anything with previous condition checking
       {6,20}   #        length at least 6 characters and maximum of 20 
)           # End of group
person Mohamed Saligh    schedule 08.12.2010
comment
Лучше используйте дополнения вместо .. Итак, \D*\d, [^a-z]*[a-z], [^A-Z]*[A-Z] и т. д. - person Gumbo; 08.12.2010

В вашем шаблоне используются символы, запрещенные в XML-документе. Для простоты введите пароль в CDATA.

person AlexR    schedule 08.12.2010

Попробуй это

^.\*(\?:.{6,20})(\?:.\*[a-z].\*[a-z])(\?:.\*[A-Z])(\?:.\*[0-9]).\*$ 
person gudgl    schedule 07.04.2019