звонок2'; $r = (new HtmlPhoneScanner)->scan($html); expect($r['code'])->toHaveKey('78432032533') ->and($r['code']['78432032533'])->toContain('tel') ->and($r['code'])->toHaveKey('78432452533'); }); it('берёт номера из schema.org и microdata', function () { $html = '' .'x'; $r = (new HtmlPhoneScanner)->scan($html); expect($r['code']['78432032533'])->toContain('schema') ->and($r['code']['78432452533'])->toContain('microdata'); }); it('считает вхождения в тело и берёт e-mail-цифры', function () { $html = 'тел 8(843)203-25-33, ещё 8(843)203-25-33. почта 2032533@mail.ru'; $r = (new HtmlPhoneScanner)->scan($html); expect($r['body']['78432032533'])->toBe(2) ->and($r['emails'])->toContain('2032533'); }); it('достраивает короткий локальный номер кодом города со страницы', function () { // на странице есть полный номер с кодом 391 (Красноярск) → код города = 391; // короткий локальный 271-33-33 (7 цифр, без кода) НЕ выкидываем, а достраиваем до 73912713333 $html = 'главный' .'филиал'; $r = (new HtmlPhoneScanner)->scan($html); expect($r['code'])->toHaveKey('73912713333') ->and($r['code'])->toHaveKey('73912000000'); }); it('достраивает короткий номер кодом региона, когда на странице нет полного', function () { // на странице ТОЛЬКО короткий 281-00-00, полных номеров нет → берём код города из запроса (391) $html = 'единственный'; $r = (new HtmlPhoneScanner)->scan($html, '391'); expect($r['code'])->toHaveKey('73912810000'); }); it('достройка не привязана к региону: работает для любого кода города', function () { // Москва (495): код города берётся со страницы, никакой привязки к Красноярску $msk = (new HtmlPhoneScanner)->scan( 'офисфилиал' ); expect($msk['code'])->toHaveKey('74957712233'); // Санкт-Петербург (812): тот же механизм, другой код $spb = (new HtmlPhoneScanner)->scan( 'офисфилиал' ); expect($spb['code'])->toHaveKey('78126405566'); // запасной код региона из запроса — тоже любой (Екатеринбург 343) $ekb = (new HtmlPhoneScanner)->scan('единственный', '343'); expect($ekb['code'])->toHaveKey('73433556677'); }); it('короткий номер без кода города НЕ теряет, а помечает «требует проверки»', function () { // ни полных номеров на странице, ни кода региона → нельзя достроить, но и терять нельзя $html = 'филиал'; $r = (new HtmlPhoneScanner)->scan($html); expect($r['code'])->toBeEmpty() ->and($r['uncertain'])->toContain('2713333'); });