
本文介绍使用 tampermonkey 脚本解析固定结构的 14 位物料编码(如 `fpputhp1100000`),依据预定义映射规则提取字段、转换语义,并拼接为形如 `acs-ppc-mrp-fresh` 的可读字符串,最终填入目标输入框。
在工业或 ERP 系统前端自动化场景中,常需对结构化编码(如物料号)进行语义化解析。本教程提供一个健壮、可维护的 Tampermonkey 脚本方案,用于将 14 位物料编码按四段规则拆解(1 + 6 + 3 + 4),映射为业务可读的短语,并逆序组合输出(如 ACS-PPC-MRP-FRESH)。
✅ 核心逻辑与实现要点
物料编码格式严格为 14 字符定长字符串,位置划分如下:
- 索引 0:首字母 → 类型标识(F/C/P/D)
- 索引 1–6(共 6 字符):工艺线标识(PPUTHP/PPUSLH/43UTHP 等)
- 索引 7–9(共 3 字符):应用单元标识(110/111/112 等)
- 索引 10–13(共 4 字符):计划属性标识(0000/5000)
⚠️ 注意:substring(start, end) 在 JavaScript 中是左闭右开区间(end 不包含)。原答案中 substring(1, 0) 有误,正确应为 substring(0, 1)。以下为修正后完整脚本:
// ==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 inputElement = document.getElementById('material-code-input'); // ← 修改为此页面实际ID
if (!inputElement) return;
const code = inputElement.value.trim();
if (code.length !== 14) {
console.warn('物料编码长度非14位,跳过处理');
return;
}
// ✅ 步骤2:按位置精确截取各段
const typeCode = code.substring(0, 1); // F / C / P / D
const lineCode = code.substring(1, 7); // PPUTHP, 43UTHP, etc.
const unitCode = code.substring(7, 10); // 110, 111, ...
const planCode = code.substring(10, 14); // 0000, 5000
// ✅ 步骤3:建立映射字典(比 if-else 更清晰、易维护)
const typeMap = { 'F': 'FRESH', 'C': 'C&T', 'P': 'PDMG', 'D': 'DMG' };
const lineMap = {
'PPUTHP': 'PPC', 'PPUSLH': 'SUPER', 'PPUFLH': 'WP',
'43UTHP': 'OPC43', '53UTHP': 'OPC53'
};
const unitMap = { '110': 'ACS', '111': 'VCS', '112': 'PGU', '113': 'DGU', '114': 'AGU' };
const planMap = { '0000': 'MRP', '5000': 'NON MRP' };
// ✅ 步骤4:安全映射 + 拼接(自动处理未知码,避免崩溃)
const typeText = typeMap[typeCode] || `UNK-${typeCode}`;
const lineText = lineMap[lineCode] || `UNK-${lineCode}`;
const unitText = unitMap[unitCode] || `UNK-${unitCode}`;
const planText = planMap[planCode] || `UNK-${planCode}`;
// ✅ 步骤5:按需求顺序拼接(ACS-PPC-MRP-FRESH → 单元-产线-计划-类型)
const result = `${unitText}-${lineText}-${planText}-${typeText}`;
// ✅ 步骤6:写入目标空输入框(请替换为实际ID)
const outputElement = document.getElementById('parsed-result-input'); // ← 修改为此页面实际ID
if (outputElement) {
outputElement.value = result;
} else {
console.warn('未找到目标输出框,请检查ID');
}
})();? 使用前必读注意事项
- 务必修改 @match 规则:确保脚本仅在目标网页运行,避免跨站干扰;
- 准确填写两个 ID:material-code-input(源输入框)和 parsed-result-input(目标输出框),可通过浏览器开发者工具(F12 → Elements)右键「Copy selector」快速获取;
- 映射字典可扩展:新增编码时,只需在对应 Map 对象中添加键值对,无需改动逻辑;
- 容错设计:对未定义编码返回 UNK-XXX 提示,便于后期排查;
- 大小写敏感:示例中编码全大写,若页面存在小写输入,建议统一转大写:code.toUpperCase()。
该方案兼顾可读性、健壮性与可维护性,适用于批量物料信息标准化展示、报表预填充或 QA 辅助校验等典型自动化场景。










