default_currency 或 config) */ public static function resolve( Request $request, ?Player $player = null, string $key = 'currency', ?string $default = null, ): string { $raw = $request->input($key) ?? $request->query($key); if (is_string($raw) && $raw !== '') { $code = strtoupper(substr(trim($raw), 0, 16)); } else { $fallback = $default ?? $player?->default_currency ?? config('lottery.default_currency', 'NPR'); $code = strtoupper(substr(trim((string) $fallback), 0, 16)); } return $code; } /** * 验证币种码格式是否合法。 * * 合法格式:1-16 位字母数字,全大写。 */ public static function isValid(string $code): bool { return preg_match('/^[A-Z0-9]{1,16}$/', $code) === 1; } /** * 解析并验证币种码,无效时返回 null。 */ public static function resolveOrNull( Request $request, ?Player $player = null, string $key = 'currency', ?string $default = null, ): ?string { $code = self::resolve($request, $player, $key, $default); return self::isValid($code) ? $code : null; } }