$alert ? 'lower' : 'upper'; } public static function validate($content, $originalRules = []) { if (!is_array($content) || empty($content)) { return '请填写检测参数'; } $numericRules = []; foreach ($originalRules as $original) { if (isset($original['warning'], $original['alert']) && self::isNumber($original['warning']) && self::isNumber($original['alert'])) { $key = !empty($original['id']) ? 'id:' . $original['id'] : 'num:' . $original['num']; $numericRules[$key] = true; } } foreach ($content as $item) { if (!is_array($item)) { return '检测参数格式无效'; } if (isset($item['direction']) && !in_array($item['direction'], ['upper', 'lower'], true)) { return '预警方向无效'; } if (!isset($item['warning'], $item['alert'])) { return '请填写预警值和警告值'; } $warningNumeric = self::isNumber($item['warning']); $alertNumeric = self::isNumber($item['alert']); $numeric = $warningNumeric && $alertNumeric; $key = !empty($item['id']) ? 'id:' . $item['id'] : 'num:' . (isset($item['num']) ? $item['num'] : ''); $expectsNumeric = isset($numericRules[$key]) || (isset($item['is_number']) && (string)$item['is_number'] === '1') || $warningNumeric || $alertNumeric; if ($expectsNumeric && !$numeric) { return $item['name'] . ':预警值和警告值必须都是有限数字'; } if (!isset($item['val']) || (is_string($item['val']) && trim($item['val']) === '')) { return $item['name'] . ':请填写检测值,缺测可填 /'; } if ($numeric && !self::isNumber($item['val']) && !preg_match('/^(?:\/|--?|未检测|未提供|暂无|未检出|未检出\s*ND|ND)$/ui', trim((string)$item['val']))) { return $item['name'] . ':检测值必须是有限数字,缺测可填 /'; } if ($numeric) { $upper = self::direction($item) === 'upper'; if (($upper && $item['warning'] > $item['alert']) || (!$upper && $item['warning'] < $item['alert'])) { return $item['name'] . ($upper ? ':越小越好指标要求预警值 ≤ 警告值(高值预警)' : ':越大越好指标要求预警值 ≥ 警告值(低值预警)'); } } } return ''; } }