PHP 正则表达式在字符串中插入特定字符串以打印 code128 条形码



为了使用 ZPL II 语言的斑马打印机打印 code128 条形码,我正在尝试将字符串(这是我的条形码)转换为新字符串。这个新字符串与一些与在 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>500025042101110823611001150119611CJ00025042101110823611001150119611>:CJ>500025042101110823611001150119611C0J0025042101110823611001150119611>:C0J0>5025042101110823611001150119611C00J025042101110823611001150119611>:C00J>5025042101110823611001150119611C000J25042101110823611001150119611>:C000J2>55042101110823611001150119611C0000J5042101110823611001150119611>:C>50000>6J>55042101110823611001150119611C00000J042101110823611001150119611>:C0>50000>6J0>542101110823611001150119611

来自 ZEBRA ZPL II 文档的额外说明:

代码 128 子集 A 和 C 在字段数据字符串中编程为数字对 00-99。[...]在子集 C 中,它们按输入的方式打印。 注意:编程为数字对 (D2) 的第一个字符的非整数将被忽略。但是,编程为数字对 (2D) 的第二个字符的非整数会使整个数字对无效,并且该对将被忽略。字段数据字符串中代码移位之前的额外未配对数字也会被忽略。

子集 C 是 NUMERIC,由 ">6" 调用

您可以将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
);

相关内容

  • 没有找到相关文章

最新更新