diff --git a/app/app/Support/RussianRegions.php b/app/app/Support/RussianRegions.php index 42da78df..e8a56747 100644 --- a/app/app/Support/RussianRegions.php +++ b/app/app/Support/RussianRegions.php @@ -169,6 +169,10 @@ final class RussianRegions // «обл.» → «область»; « АО» → « автономный округ». $name = (string) preg_replace('/\s*обл\.$/u', ' область', $segment); $name = (string) preg_replace('/\s+АО$/u', ' автономный округ', $name); + // Дефис с пробелами → длинное тире (эталон: «Республика Северная Осетия — Алания»). + // Безопасно: ни одно каноническое имя не содержит дефис, окружённый пробелами + // (составные имена вроде «Кабардино-Балкарская» используют дефис без пробелов). + $name = str_replace(' - ', ' — ', $name); if (isset(self::nameToCode()[$name])) { return $name; diff --git a/app/tests/Unit/Support/RussianRegionsTest.php b/app/tests/Unit/Support/RussianRegionsTest.php index 19d64e60..0e87d481 100644 --- a/app/tests/Unit/Support/RussianRegionsTest.php +++ b/app/tests/Unit/Support/RussianRegionsTest.php @@ -95,3 +95,8 @@ it('maps Moscow / SPb spelling variants', function (): void { expect(RussianRegions::resolveSubjectCode('Город Москва'))->toBe(82) ->and(RussianRegions::resolveSubjectCode('г. Санкт - Петербург'))->toBe(83); }); + +it('normalizes spaced hyphen to em-dash (Северная Осетия — Алания)', function (): void { + expect(RussianRegions::resolveSubjectCode('Республика Северная Осетия - Алания'))->toBe(18) + ->and(RussianRegions::resolveSubjectCode('г. Владикавказ|Республика Северная Осетия - Алания'))->toBe(18); +});