GradingMarkBoxCounter.php 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. <?php
  2. namespace App\Support;
  3. class GradingMarkBoxCounter
  4. {
  5. public function countFillBlanks(?string $text): int
  6. {
  7. $text = (string) $text;
  8. $count = 0;
  9. $count += preg_match_all('/_{2,}/u', $text, $m);
  10. $count += preg_match_all('/(\s*)/u', $text, $m);
  11. $count += preg_match_all('/\(\s*\)/', $text, $m);
  12. return max(1, $count);
  13. }
  14. public function countAnswerSteps(?string $text): int
  15. {
  16. $text = (string) $text;
  17. $stepPattern = '(步骤\s*[0-9一二三四五六七八九十百零两]+\s*[::]?|第\s*[0-9一二三四五六七八九十百零两]+\s*步\s*[::]?)';
  18. if (!preg_match('/' . $stepPattern . '/u', $text)) {
  19. return 1;
  20. }
  21. $parts = preg_split('/(?=' . $stepPattern . ')/u', $text, -1, PREG_SPLIT_NO_EMPTY) ?: [];
  22. $count = 0;
  23. foreach ($parts as $part) {
  24. $stepText = trim((string) $part);
  25. if ($stepText !== '' && preg_match('/^' . $stepPattern . '/u', $stepText)) {
  26. $count++;
  27. }
  28. }
  29. return max(1, $count);
  30. }
  31. }