Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'A'..'Z' + 'a'..'z' + '0'..'9'
- '0'..'9'+ 'A'..'Z' + 'a'..'z'
- 'a'..'z' 'A'..'Z' + '0'..'9'
- function IsGood(AInpStr: String; AMinLen, AMaxLen: Integer;
- AAlowOnlyLetters: Boolean = True): Boolean;
- var
- i, j, m: Integer;
- a, b, c, d, k: Boolean;
- a1, b1, c1, d1, k1: Boolean;
- Len: Integer;
- CU, CL, SF: TSysCharSet;
- begin
- Result := False;
- Len := Length(AInpStr);
- CU := ['A' .. 'Z'];
- CL := ['a' .. 'z'];
- SF := ['0' .. '9'];
- // Флаг разрешающий только буквы или вообще любые символы, по умолчанию - включено
- // True - Разрешить только указанный диапазон для поиска
- // False - Разрешить включение и других символов для поиска
- if AAlowOnlyLetters then
- begin
- for i := 1 to Len do
- begin
- a := CharInSet(AInpStr[i], CU);
- b := CharInSet(AInpStr[i], CL);
- k1 := CharInSet(AInpStr[i], SF);
- if not(a or b or k1) then
- Exit;
- end;
- end;
- // разрешаем минимальную и максимальную длину
- if not((Len >= AMinLen) and (Len <= AMaxLen)) then
- Exit;
- for i := 1 to Len do
- begin
- k1 := CharInSet(AInpStr[i], SF);
- a := CharInSet(AInpStr[i], CU);
- b := CharInSet(AInpStr[i], CL);
- for j := i to Len do
- begin
- c := CharInSet(AInpStr[j], CU);
- d := CharInSet(AInpStr[j], CL);
- a1 := CharInSet(AInpStr[j], CU);
- b1 := CharInSet(AInpStr[j], CL);
- for m := i to Len do
- begin
- k := CharInSet(AInpStr[m], SF);
- c1 := CharInSet(AInpStr[m], CU);
- d1 := CharInSet(AInpStr[m], CL);
- // Вот тут идет проверка разных комбинаций
- if (a and d and k) or (b and c and k) or (k1 and a1 and d1) or
- (k1 and b1 and c1)
- // Ну и тут вывод результата если строка подходит под условия
- then
- begin
- Result := True;
- Exit;
- end
- end;
- end;
- end;
- end;
- function SplitLeftRight(AInpStr: String; var ALeftStr: String; var ARightStr: String): Boolean;
- var p: Integer;
- begin
- p := Pos(':', AInpStr);
- ALeftStr := Copy(AInpStr, 1, p - 1); // все, что до двоеточия ...
- ARightStr := Copy(AInpStr, p + 1, Length(AInpStr) - p + 1); // и все, что после ...
- Result := (Length(ALeftStr) > 1) and (Length(ARightStr) > 1);
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- var i: Integer;
- S, L, R: String;
- begin
- for i := 0 to Memo1.Lines.Count - 1 do
- begin
- // текущая строка
- S := Memo1.Lines[i];
- // парсим обе стороны
- if SplitLeftRight(S, L, R) then
- begin
- // и если все хорошо, пробуем задать диапазоны обеих частей
- // ну и если тут все хорошо... то уж выведем такую строчку
- if {IsGood(L, 2, 5) and} IsGood(R, 5, 100) then
- Memo2.Lines.Add(S)
- end;
- end;
- end;
- 111:123AAss
- 222:123AAbb
- 333:123aass
- 444:123aass
- 111:123AAss
- 222:123AAbb
- function IsGood(AInpStr: String; AMinLen, AMaxLen: Integer; AAlowOnlyLetters: Boolean = True): Boolean;
- var i: Integer;
- Len: Integer;
- CU, CL,SF: TSysCharSet;
- c: Char;
- colonIndex: integer;
- hasLower, hasUpper, hasDigit :Boolean;
- begin
- Result := False;
- Len := Length(AInpStr);
- CU := ['A'..'Z'];
- CL := ['a'..'z'];
- SF := ['0'..'9'];
- // Флаг разрешающий только буквы или вообще любые символы, по умолчанию - включено
- // True - Разрешить только буквы a-z A-Z для поиска
- // False - Разрешить включение и других символов для поиска
- colonIndex:= Pos(':', AInpStr);
- if colonIndex = 0 then
- exit;
- hasLower := false;
- hasUpper := false;
- hasDigit := false;
- // разрешаем минимальную и максимальную длину
- if not ((Len >= AMinLen) and (Len <= AMaxLen)) then Exit;
- for i := colonIndex + 1 to Len do
- begin
- if not hasLower then
- hasLower := CharInSet(AInpStr[i], CL);
- if not hasUpper then
- hasUpper := CharInSet(AInpStr[i], CU);
- if not hasDigit then
- hasDigit := CharInSet(AInpStr[i], SF);
- if hasLower and hasUpper and hasDigit then
- begin
- Result := true;
- exit;
- end;
- end;
- end;
- c := CharInSet(AInpStr[j], CU);
- d := CharInSet(AInpStr[j], CL);
- a1 := CharInSet(AInpStr[j], CU);
- b1 := CharInSet(AInpStr[j], CL);
- colonIndex = Pos(":", AInpStr);
- if colonIndex = 0 then
- exit;
- hasLower := false;
- hasUpper := false;
- hasDigit := false;
- for i := colonIndex + 1 to Len do
- begin
- if not hasLower then
- hasLower := CharInSet(AInpStr[i], CL);
- if not hasUpper then
- hasUpper := CharInSet(AInpStr[i], CU);
- if not hasDigit then
- hasDigit := CharInSet(AInpStr[i], SF);
- if hasLower and hasUpper and hasDigit then
- begin
- Result := true;
- exit;
- end;
- end;
Add Comment
Please, Sign In to add comment