PHP Regex для вставки определенных строк в строку для печати штрих-кода code128 - PullRequest
1 голос
/ 12 июня 2019

Чтобы напечатать штрих-код code128 на принтере Zebra на языке ZPL II, я пытаюсь преобразовать строку (которая является моим штрих-кодом) в новую строку.Эта новая строка - та же самая строка с некоторыми определенными командами, связанными с переключением между режимами ALPHA и NUMERIC.Переключение в цифровой режим помогает сделать ваш штрих-код более компактным.скажем, штрих-код, который я хочу напечатать: C00J025042101110823611001150119611 результат должен быть таким:

>:C00J>5025042101110823611001150119611

>: mean we Start in ALPHA
>5 Mean we switch from ALPHA to NUMERIC ONLY
>6 Mean we switch from NUMERIC to ALPHA

Итак, я ищу (если возможно) REGEX, который вставит >5 или>6 в моей строке.

вот еще один пример:

штрих-код для печати = CJYJY10442101110S23611001150119611

Строка для отправки на принтер = >:CJYJY1>50442101110>6S2>53611001150119611

Еще один пример, чтобы понять, как это начинается.Слева штрих-код для печати, справа код, отправленный на принтер.

C000025042101110823611001150119611 >:C0>500025042101110823611001150119611 CJ00025042101110823611001150119611 >:CJ>500025042101110823611001150119611 C0J0025042101110823611001150119611 >:C0J0>5025042101110823611001150119611 C00J025042101110823611001150119611 >:C00J>5025042101110823611001150119611 C000J25042101110823611001150119611 >:C000J2>55042101110823611001150119611 C0000J5042101110823611001150119611 >:C>50000>6J>55042101110823611001150119611 C00000J042101110823611001150119611 >:C0>50000>6J0>542101110823611001150119611

Дополнительные примечания из документации ZEBRA ZPL II:

Подмножества кодов 128 A и C программируются как парыцифр 00-99 в строке данных поля.[...] в подмножестве C они печатаются как введенные.ПРИМЕЧАНИЕ. Нецелые числа, запрограммированные в качестве первого символа пары цифр (D2), игнорируются.Однако нецелые числа, запрограммированные как второй символ пары цифр (2D), делают недействительной всю пару цифр, и эта пара игнорируется.Дополнительная непарная цифра в строке данных поля непосредственно перед сдвигом кода также игнорируется.

Подмножество C имеет значение NUMERIC, вызываемое "> 6"

1 Ответ

3 голосов
/ 12 июня 2019

Вы можете использовать preg_replace с аргументами массива:

$result = preg_replace(
    array(
        '/(^\D)/',
        '/(\D)(\d)/',
        '/(\d)(\D)/',
    ),
    array(
        '>:$1',
        '$1>5$2',
        '$1>6$2',
    ),
    $code
);

UPD

Согласно последним комментариям вы можете попытаться переключаться между режимами, только если найдены пары пар.

$result = preg_replace(
    array(
        '/(^\D)/',
        '/((?:\d{2})+)/',
        '/\>[56]$/',
    ),
    array(
        '>:$1',
        '>5$1>6',
        '',
    ),
    $code
);
...