Регулярное выражение добавляет начальный ноль к EAN-13

Любые предложения о том, как лучше всего использовать Regex для добавления начального нуля к 12-значному EAN-коду.

EAN-коды по умолчанию состоят из 13 цифр (12+1 элемент управления), но некоторые производители используют 12-значный код EAN, что означает, что вам нужно добавить начальный ноль, чтобы он работал в некоторых системах. Как бы я использовал регулярное выражение, чтобы лучше всего это сделать?

Если код уже состоит из 13 цифр, никаких изменений вносить не нужно. (Кстати, это не из-за отсутствия контрольной цифры - использование калькулятора для добавления контрольной цифры к 12 цифрам приводит к неправильному штрих-коду, к вашему сведению)

Спасибо!


person user3181084    schedule 10.01.2014    source источник
comment
Почему Regex является необходимой частью решения этой проблемы? Кажется, что (проверьте длину строки. Добавьте 0, если длина равна 12) — это несколько строк простого кода на большинстве языков.   -  person Damien_The_Unbeliever    schedule 10.01.2014
comment
Мне нужно использовать регулярное выражение из-за системы, над которой я работаю, импорт данных для InDesign.   -  person user3181084    schedule 10.01.2014
comment
Спасибо за помощь, ребята, сегодня здесь добавлена ​​еще одна вмятина во вселенной регулярных выражений.   -  person user3181084    schedule 10.01.2014


Ответы (2)


Если вы хотите использовать регулярное выражение, просто добавьте начальный 0 к каждому 12-значному (и не более) EAN.

Пример PHP:

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

$ean = '0978294019961';
echo preg_replace('/^\d{12}$/', '0$0', $ean); // 0978294019961
person zessx    schedule 10.01.2014
comment
Кажется, это помогло, когда я удалил / . Тестирование с помощью myregextester. В настоящее время не нахожусь на ID-машине, скоро проверю там .. Большое спасибо, это было легко! - person user3181084; 10.01.2014
comment
/ являются разделителями, и myregextester.com автоматически добавляют их. - person zessx; 10.01.2014
comment
Рядом с раскрывающимся списком ОПЕРАЦИЯ вы можете увидеть раскрывающийся список РАЗДЕЛИТЕЛЬ, позволяющий выбрать, какой разделитель использовать (по умолчанию: /). - person zessx; 10.01.2014
comment
Ааа, хорошо, теперь я понимаю, что это значит. Смотрел на это, думал, что это как-то связано с этим.. - person user3181084; 10.01.2014

Ява:

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

PHP:

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

Это не использование Regex, а просто добавление нуля перед ean, если ean имеет длину 12 цифр.

person Peter Perháč    schedule 10.01.2014
comment
Я не очень хорошо знаком с тем, как это написано. Надстройка InDesign использует простую строку Regex для поиска и замены. - person user3181084; 10.01.2014
comment
извините, я предположил, что это Java, но, глядя на теги, вы на самом деле не указали язык... - person Peter Perháč; 10.01.2014