Portál AbcLinuxu, 5. května 2025 23:19

Dotaz: PHP: preg_replace a strtoupper

27.3.2023 20:19 tom
PHP: preg_replace a strtoupper
Přečteno: 391×
Odpovědět | Admin
Zdravim,

mam blok textu, ktery potrebuji prezentovat zakaznikovi

A nekde v tom textu se nachazi MAC adresa ve formatu: a1b2-c3d4-e5f6

Jenze zakaznik ji chce videt jako A1:B2:C3:D4:E5:F6

Za vydatneho googlovani jsem vykresal tento kod:

$text = preg_replace('/([a-z0-9]{2})([a-z0-9]{2})-([a-z0-9]{2})([a-z0-9]{2})-([a-z0-9]{2})([a-z0-9]{2})/', '\1:\2:\3:\4:\5:\6', $text);

Ale jak provest strtoupper() pouze u teto MAC adresy a ne u celeho textu?

Dekuji

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.3.2023 20:44 tom
Rozbalit Rozbalit vše Re: PHP: preg_replace a strtoupper
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak zaprve "[a-f0-9]", samozrejme, sorry

a zadruhe jsem to zatim vyresil "na prase":

$text = preg_replace('/([a-f0-9]{2})([a-f0-9]{2})-([a-f0-9]{2})([a-f0-9]{2})-([a-f0-9]{2})([a-f0-9]{2})/', '<span style="text-transform:uppercase;">\1:\2:\3:\4:\5:\6</span>', $text);

Ale tohle detem neukazujte ;-)

27.3.2023 20:58 tttttttttttttt
Rozbalit Rozbalit vše Re: PHP: preg_replace a strtoupper
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jde to pomocí preg_replace_callback:
<?php

$subject = 'mac address a1b2-c3d4-e5f6';
$text = preg_replace_callback(
    '/([a-z0-9]{2})([a-z0-9]{2})-([a-z0-9]{2})([a-z0-9]{2})-([a-z0-9]{2})([a-z0-9]{2})/',
    function ($matches) {
        return strtoupper($matches[0]);
    },
    $subject
);
$text = preg_replace('/([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})-([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})-([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})/', '\1:\2:\3:\4:\5:\6', $text); 
echo $text // mac address A1:B2:C3:D4:E5:F6
?>
Za domácí úkol to můžeš vylepšit, udělat z toho jen jeden regexp a omezit ty výčty tak, aby neobsahovaly nic navíc.
27.3.2023 21:11 tom
Rozbalit Rozbalit vše Re: PHP: preg_replace a strtoupper
Diky!

O preg_replace_callback() slysim poprve

Jeden regexp bych z toho nedelal. Libi se mi to takto rozepsane. A ano, malinko ucesat by se to dalo

Jeste jednou diky, a mejte se!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.