为了使用 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>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" 调用
您可以将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
);