From 339c5f09f7e71cac3952f14c36ace297d2336ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Wed, 3 Jun 2026 08:46:32 +0300 Subject: [PATCH] =?UTF-8?q?fix(rossvyaz):=20normalize=20spaced=20hyphen=20?= =?UTF-8?q?to=20em-dash=20(=D0=A1=D0=B5=D0=B2=D0=B5=D1=80=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=9E=D1=81=D0=B5=D1=82=D0=B8=D1=8F=20=E2=80=94=20?= =?UTF-8?q?=D0=90=D0=BB=D0=B0=D0=BD=D0=B8=D1=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Registry writes 'Республика Северная Осетия - Алания' (hyphen) while the canonical name uses an em-dash. Replace ' - ' with ' — ' before lookup — safe because no canonical name contains a space-surrounded hyphen. Unit-tested. --- app/app/Support/RussianRegions.php | 4 ++++ app/tests/Unit/Support/RussianRegionsTest.php | 5 +++++ 2 files changed, 9 insertions(+) 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); +});