
本文介绍如何使用 tampermonkey 脚本解析固定结构的 14 位物料编码(如 `fpputhp1100000`),按字段切分、映射业务含义,并重组为 `acs-ppc-mrp-fresh` 类标准格式,支持多版本编码规则与动态映射。
在实际网页自动化场景中,常需对结构化编码(如物料号)进行语义化解析与重排。本文以 14 位物料编码 FPPUTHP1100000 为例,其结构严格分为四段:
- 第 1 位(索引 0):状态标识(F/C/P/D → FRESH/C&T/PDMG/DMG)
- 第 2–7 位(索引 1–6):品类代码(6 字符,如 PPUTHP → PPC)
- 第 8–10 位(索引 7–9):应用类型(3 字符,如 110 → ACS)
- 第 11–14 位(索引 10–13):价格策略(4 字符,如 0000 → MRP)
以下为完整、健壮的 Tampermonkey 脚本实现(含错误处理与可扩展映射表):
// ==UserScript==
// @name 物料编码语义化解析器
// @namespace https://tampermonkey.net/
// @version 1.1
// @description 将14位物料编码(如FPPUTHP1100000)按规则拆分并重组为ACS-PPC-MRP-FRESH格式
// @match *://*/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// ✅ 步骤1:获取源输入框值(请替换为实际ID)
const inputEl = document.getElementById('material-code-input'); // ← 替换为页面中input的实际id
if (!inputEl) return;
const code = inputEl.value.trim();
if (code.length !== 14 || !/^[FCPD][A-Z0-9]{13}$/.test(code)) {
console.warn('物料编码格式不符:需严格14位,首字符为F/C/P/D');
return;
}
// ✅ 步骤2:按位置精确切片(注意:substring(start, end) 是左闭右开)
const statusChar = code.substring(0, 1); // 第1位
const categoryCode = code.substring(1, 7); // 第2–7位(6字符)
const typeCode = code.substring(7, 10); // 第8–10位(3字符)
const priceCode = code.substring(10, 14); // 第11–14位(4字符)
// ✅ 步骤3:建立可维护的映射字典(推荐!比if-else更清晰、易扩展)
const statusMap = { 'F': 'FRESH', 'C': 'C&T', 'P': 'PDMG', 'D': 'DMG' };
const categoryMap = {
'PPUTHP': 'PPC', 'PPUSLH': 'SUPER', 'PPUFLH': 'WP',
'43UTHP': 'OPC43', '53UTHP': 'OPC53'
};
const typeMap = { '110': 'ACS', '111': 'VCS', '112': 'PGU', '113': 'DGU', '114': 'AGU' };
const priceMap = { '0000': 'MRP', '5000': 'NON MRP' };
// ✅ 步骤4:安全映射 + 拼接(缺失键时返回原始码,便于调试)
const status = statusMap[statusChar] || `UNKNOWN_STATUS(${statusChar})`;
const category = categoryMap[categoryCode] || `UNKNOWN_CATEGORY(${categoryCode})`;
const type = typeMap[typeCode] || `UNKNOWN_TYPE(${typeCode})`;
const price = priceMap[priceCode] || `UNKNOWN_PRICE(${priceCode})`;
// ✅ 步骤5:按目标顺序拼接(ACS-PPC-MRP-FRESH)
const result = `${type}-${category}-${price}-${status}`;
// ✅ 步骤6:写入目标空输入框(请替换为实际ID)
const outputEl = document.getElementById('parsed-result-input'); // ← 替换为目标input的id
if (outputEl) {
outputEl.value = result;
} else {
console.error('未找到目标输出框,请检查ID: parsed-result-input');
}
})();? 关键注意事项:
- 索引修正:原答案中 substring(1, 0) 写法错误(起始大于结束会返回空字符串),正确应为 substring(0, 1);本文已按 JavaScript 字符串索引规范(0-based)严格校正。
- 健壮性增强:添加长度校验、正则预检、映射失败兜底逻辑,避免脚本因异常输入崩溃。
- 可维护性设计:使用对象字面量(Map)替代冗长 if-else 链,新增编码规则只需扩展对应对象即可。
- Tampermonkey 部署提示:保存脚本后,在目标网页按 Ctrl+Shift+J 打开控制台,确认无报错;若输入框 ID 不同,请同步修改 getElementById() 中的字符串。
通过该脚本,您可一键将任意符合规则的物料编码(如 CPPUSLH1115000 → VCS-SUPER-NON MRP-C&T)标准化输出,大幅提升数据处理效率与可读性。










