Guest User

Untitled

a guest
Nov 20th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.23 KB | None | 0 0
  1. 'A'..'Z' + 'a'..'z' + '0'..'9'
  2. '0'..'9'+ 'A'..'Z' + 'a'..'z'
  3. 'a'..'z' 'A'..'Z' + '0'..'9'
  4.  
  5. function IsGood(AInpStr: String; AMinLen, AMaxLen: Integer;
  6. AAlowOnlyLetters: Boolean = True): Boolean;
  7. var
  8. i, j, m: Integer;
  9. a, b, c, d, k: Boolean;
  10. a1, b1, c1, d1, k1: Boolean;
  11. Len: Integer;
  12. CU, CL, SF: TSysCharSet;
  13. begin
  14.  
  15. Result := False;
  16. Len := Length(AInpStr);
  17.  
  18. CU := ['A' .. 'Z'];
  19. CL := ['a' .. 'z'];
  20. SF := ['0' .. '9'];
  21.  
  22. // Флаг разрешающий только буквы или вообще любые символы, по умолчанию - включено
  23. // True - Разрешить только указанный диапазон для поиска
  24. // False - Разрешить включение и других символов для поиска
  25. if AAlowOnlyLetters then
  26. begin
  27. for i := 1 to Len do
  28. begin
  29. a := CharInSet(AInpStr[i], CU);
  30. b := CharInSet(AInpStr[i], CL);
  31. k1 := CharInSet(AInpStr[i], SF);
  32. if not(a or b or k1) then
  33. Exit;
  34. end;
  35. end;
  36.  
  37. // разрешаем минимальную и максимальную длину
  38. if not((Len >= AMinLen) and (Len <= AMaxLen)) then
  39. Exit;
  40.  
  41. for i := 1 to Len do
  42. begin
  43. k1 := CharInSet(AInpStr[i], SF);
  44. a := CharInSet(AInpStr[i], CU);
  45. b := CharInSet(AInpStr[i], CL);
  46.  
  47. for j := i to Len do
  48. begin
  49. c := CharInSet(AInpStr[j], CU);
  50. d := CharInSet(AInpStr[j], CL);
  51. a1 := CharInSet(AInpStr[j], CU);
  52. b1 := CharInSet(AInpStr[j], CL);
  53.  
  54. for m := i to Len do
  55. begin
  56. k := CharInSet(AInpStr[m], SF);
  57. c1 := CharInSet(AInpStr[m], CU);
  58. d1 := CharInSet(AInpStr[m], CL);
  59.  
  60. // Вот тут идет проверка разных комбинаций
  61. if (a and d and k) or (b and c and k) or (k1 and a1 and d1) or
  62. (k1 and b1 and c1)
  63. // Ну и тут вывод результата если строка подходит под условия
  64. then
  65. begin
  66. Result := True;
  67. Exit;
  68. end
  69. end;
  70. end;
  71. end;
  72. end;
  73.  
  74. function SplitLeftRight(AInpStr: String; var ALeftStr: String; var ARightStr: String): Boolean;
  75. var p: Integer;
  76. begin
  77. p := Pos(':', AInpStr);
  78. ALeftStr := Copy(AInpStr, 1, p - 1); // все, что до двоеточия ...
  79. ARightStr := Copy(AInpStr, p + 1, Length(AInpStr) - p + 1); // и все, что после ...
  80.  
  81. Result := (Length(ALeftStr) > 1) and (Length(ARightStr) > 1);
  82. end;
  83.  
  84. procedure TForm1.Button1Click(Sender: TObject);
  85. var i: Integer;
  86. S, L, R: String;
  87. begin
  88. for i := 0 to Memo1.Lines.Count - 1 do
  89. begin
  90. // текущая строка
  91. S := Memo1.Lines[i];
  92.  
  93. // парсим обе стороны
  94. if SplitLeftRight(S, L, R) then
  95. begin
  96. // и если все хорошо, пробуем задать диапазоны обеих частей
  97. // ну и если тут все хорошо... то уж выведем такую строчку
  98. if {IsGood(L, 2, 5) and} IsGood(R, 5, 100) then
  99. Memo2.Lines.Add(S)
  100. end;
  101. end;
  102. end;
  103.  
  104. 111:123AAss
  105. 222:123AAbb
  106. 333:123aass
  107. 444:123aass
  108.  
  109. 111:123AAss
  110. 222:123AAbb
  111.  
  112. function IsGood(AInpStr: String; AMinLen, AMaxLen: Integer; AAlowOnlyLetters: Boolean = True): Boolean;
  113. var i: Integer;
  114. Len: Integer;
  115. CU, CL,SF: TSysCharSet;
  116. c: Char;
  117. colonIndex: integer;
  118. hasLower, hasUpper, hasDigit :Boolean;
  119. begin
  120. Result := False;
  121. Len := Length(AInpStr);
  122.  
  123. CU := ['A'..'Z'];
  124. CL := ['a'..'z'];
  125. SF := ['0'..'9'];
  126. // Флаг разрешающий только буквы или вообще любые символы, по умолчанию - включено
  127. // True - Разрешить только буквы a-z A-Z для поиска
  128. // False - Разрешить включение и других символов для поиска
  129. colonIndex:= Pos(':', AInpStr);
  130. if colonIndex = 0 then
  131. exit;
  132.  
  133. hasLower := false;
  134. hasUpper := false;
  135. hasDigit := false;
  136.  
  137. // разрешаем минимальную и максимальную длину
  138. if not ((Len >= AMinLen) and (Len <= AMaxLen)) then Exit;
  139.  
  140. for i := colonIndex + 1 to Len do
  141. begin
  142. if not hasLower then
  143. hasLower := CharInSet(AInpStr[i], CL);
  144. if not hasUpper then
  145. hasUpper := CharInSet(AInpStr[i], CU);
  146. if not hasDigit then
  147. hasDigit := CharInSet(AInpStr[i], SF);
  148. if hasLower and hasUpper and hasDigit then
  149. begin
  150. Result := true;
  151. exit;
  152. end;
  153. end;
  154. end;
  155.  
  156. c := CharInSet(AInpStr[j], CU);
  157. d := CharInSet(AInpStr[j], CL);
  158. a1 := CharInSet(AInpStr[j], CU);
  159. b1 := CharInSet(AInpStr[j], CL);
  160.  
  161. colonIndex = Pos(":", AInpStr);
  162. if colonIndex = 0 then
  163. exit;
  164.  
  165. hasLower := false;
  166. hasUpper := false;
  167. hasDigit := false;
  168.  
  169. for i := colonIndex + 1 to Len do
  170. begin
  171. if not hasLower then
  172. hasLower := CharInSet(AInpStr[i], CL);
  173. if not hasUpper then
  174. hasUpper := CharInSet(AInpStr[i], CU);
  175. if not hasDigit then
  176. hasDigit := CharInSet(AInpStr[i], SF);
  177. if hasLower and hasUpper and hasDigit then
  178. begin
  179. Result := true;
  180. exit;
  181. end;
  182. end;
Add Comment
Please, Sign In to add comment