2014-01-10 37 views
0

关于如何最佳使用正则表达式将前导零添加到12位EAN代码的任何建议。 EAN码默认为13位(12+ 1控制),但有些制造商使用12位EAN,这意味着您需要添加前导零来使其在某些系统中工作。我如何使用正则表达式来最好地做到这一点?正则表达式将前导零添加到EAN-13

如果代码已有13位数字,则不应进行更改。 (顺便说一句,这不是由于缺少控制数字 - 使用计算器将控制添加到12位数字导致错误的条码只是fyi)

谢谢!

+9

为什么正则表达式的解决这个问题的一个必要组成部分?看起来像(检查字符串的长度,如果长度是12,则预先设置一个0)是大多数语言中几行直截了当的代码。 –

+0

我的想法。 –

+0

由于我正在使用的系统,InDesign的数据导入,我需要使用正则表达式。 – user3181084

回答

2

如果您想要使用正则表达式,只需在每个12位数字(而不是更多)EAN中添加前导0即可。

PHP例子:

$ean = '978294019961'; 
echo preg_replace('/^\d{12}$/', '0$0', $ean); // 0978294019961 

$ean = '0978294019961'; 
echo preg_replace('/^\d{12}$/', '0$0', $ean); // 0978294019961 
+0

这似乎是在我删除“/”时做的窍门。 使用[myregextester](http://www.myregextester.com/index.php)进行测试。 目前不在身份证机器,很快就会在那里测试.. 非常感谢,这是一个简单的! – user3181084

+0

'/'是分隔符,'myregextester.com'自动添加它们。 – zessx

+0

好的,这是很好的知道。 – user3181084

0

的Java:

String EAN13 = (EAN.length()==12?"0":"") + EAN; 

PHP:

$ean13 = (strlen($ean)==12?"0":"") . $ean; 

这是不使用正则表达式,只是普通的预等待与零的EAN,如果EAN是12位长。

+0

我不太熟悉这种书写方式.InDesign插件使用简单的Regex字符串进行搜索和替换。 – user3181084

+0

对不起,我以为这是Java,但看着标签,你并没有真正指定语言...... –