Весовой ШК и регулярные выражения

urhero 4 года назад обновлен Александр Бушнов (Программист) 4 года назад 3

ШК весового товара именю вид:

2303112004187

2311936357907

2303112004187

где: 

23 - префикс

[6 символов] - код товара

[4 символа] - вес товара

[1 символ] - контрольная сумма

23{Barcode:@[0-9]{6}}{Quantity:@[0-9]{1}.[0-9]{4}}{OneC:1}


написал в шаблонах вот такое регулярное выражение для распознавания товара. Но, вес товара распознается не верно!

Например:

23 031120 0418 7

Вес будет распознан как 4.187, хотя на самом деле 0,418

Для обработки таких весовых штрихкодов не нужно использовать регулярные выражения, это избыточно. Здесь достаточно добавить шаблон следующего вида:


23{Barcode:6}{Quantity:1.3}{OneC:1}

Шаблон 23{Barcode:@[0-9]{6}}{Quantity:@[0-9]{1}.[0-9]{4}}{OneC:1} для штрихкода 2303112004187 не отработает, т.к. в шаблоне ожидается строка 14 символов - 2 символа префикс + 6 код товара + 5 вес + 1 контрольная = 14.

Неправильно распознаётся вес скорее всего из-за разбора сканируемого ШК каким-то другим шаблоном, в котором Quantity захватывает 4187 вместо 0418.

Тогда мне прийдется на 5-4-3 значные Barcode добавлять тоже шаблоны и будет выглядеть это так:

23{Barcode:6}{Quantity:1.3}{OneC:1}

230{Barcode:5}{Quantity:1.3}{OneC:1}

2300{Barcode:4}{Quantity:1.3}{OneC:1}

23000{Barcode:3}{Quantity:1.3}{OneC:1}

Как показала практика это приводит к очень долгому поиску весового товара, да и выглядит откровенно костыльно.

Я немного ошибся в шаблоне с регулярным выражением, когда его печатал в вопросе:

23{Barcode:@[0-9]{6}}{Quantity:@[0-9]{1}.[0-9]{3}}{OneC:1}

Естественно, там цифра 3, забираем 3 знака.

И нет, это единственный шаблон, никакой другой шаблон не может подхватить этот ШК и вес определяется неправильно. И, к слову. в вес почему-то попадает Контрольная сумма, хотя должна отметаться.

Тогда мне прийдется на 5-4-3 значные Barcode добавлять тоже шаблоны

Можно при выгрузке дополнить до 6 символов лидирующими нулями все коды короче 6 символов.

23{Barcode:@[0-9]{6}}{Quantity:@[0-9]{1}.[0-9]{3}}{OneC:1}

В этом виде шаблон также не работает. 

Вот эта часть: {Quantity:@[0-9]{1}.[0-9]{3}} не разбирается. Можно сделать шаблон работоспособным заменив эту часть на {Quantity:1.3} - количество символов в этой части неизменно. Рабочий шаблон будет выглядеть так:23{Barcode:@[0-9]{6}}{Quantity:1.3}{OneC:1}

Но даже если он будет работать, как регулярное выражение избавит от необходимости добавлять нули в код товара? После срабатывания этот шаблон также вернёт 6 цифр, следующие после 23, в качестве Barcode.

Сервис поддержки клиентов работает на платформе UserEcho