Използване на регулярен израз за проверка на парола

Използвам следния регулярен израз в моя код на 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, е доста лесно да конфигурирате обектите за правило за парола в Spring XML файл за свързване. Това ви позволява да коригирате правилата, без да променяте кода си.)

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