Нуждаете се от съответстваща група на RegExpr от 8, съдържаща 2+ главни букви, 2+ малки букви и 1+ число

Опитвам се да създам спам филтър с помощта на регулярни изрази, който съответства на следната ситуация.

  • Има група от точно 8 буквено-цифрови знака, които трябва да бъдат съпоставени.
  • Трябва да съдържа 2 или повече главни букви;
  • И трябва да съдържа 2 или повече малки букви;
  • И трябва да съдържа 1 или повече числа.

Досега всичко, което успях да измисля, е следното:

(?i)[A-Za-z0-9]{8}

Моят код съвпада със смесена група от 8 букви, но не налага главни или малки букви или указва колко пъти трябва да се появи всеки тип. Така че го комбинирам с други задължителни неща, които винаги присъстват във въпросните съобщения.

Ето пример от модела, който се опитвам да открия:

WbNDSk9e

Това е част от спам URL. Други групи, които съм виждал, следват същия модел от поне 2 букви UC и LC и 1 или повече цифри и винаги имат точно 8 знака. Все още не съм виждал други герои или вариации.

Доколкото знам, единственият превключвател, който мога да използвам, е да включа чувствителността към малки и главни букви с (?i). Някои от другите ключове, които видях в някои отговори, не работят в програмата, която използвам. Искам ли твърде много от едноредовото правило RegExpr?

В момента използвам RegEx Match, за да тествам правилата си и моята анти-спам програма използва същия двигател.


person Bob Feinberg    schedule 26.05.2012    source източник


Отговори (1)


^(?=.*?[A-Z].*?[A-Z])(?=.*?[a-z].*?[a-z])(?=.*?\d).{8}$

Разбито:

(?=.*?[A-Z].*?[A-Z]) налага поне 2 главни букви.

(?=.*?[a-z].*?[a-z]) налага поне 2 малки букви.

(?=.*?\d) принуждава поне 1 цифра.

Каретката ^ ... $ и доларът принуждават да съответства на целия низ.

Не искате флага (?i), защото ще го направи нечувствителен към главни и малки букви.

person agent-j    schedule 26.05.2012