正则表达式实现字符串连字符添加及异常格式处理
解决方案
核心思路
先统一清理输入(移除所有非字母数字字符,从根源避免重复连字符问题),再按照固定分段规则添加连字符。
实现代码
function formatCode(input) { // 清理输入:移除所有非字母数字字符,同时统一转为大写(可选,按需调整) const cleanedInput = input.replace(/[^A-Z0-9]/gi, '').toUpperCase(); // 仅当清理后长度为7位时,执行格式化 if (cleanedInput.length !== 7) { return cleanedInput; // 若长度不符,返回清理后的原始值,也可按需抛出提示或错误 } // 按规则拆分并添加连字符:前2位 + 中间3位 + 最后2位 return cleanedInput.replace(/^(.{2})(.{3})(.{2})$/, '$1-$2-$3'); } // 测试验证 console.log(formatCode('FN322KN')); // 输出: "FN-322-KN" console.log(formatCode('FN-322KN')); // 输出: "FN-322-KN" console.log(formatCode('F-N322-KN')); // 输出: "FN-322-KN" console.log(formatCode('fn322kn')); // 输出: "FN-322-KN" console.log(formatCode('FN322')); // 输出: "FN322"(长度不符时返回清理后的值)
代码说明
- 输入清理:使用正则
/[^A-Z0-9]/gi匹配所有非字母数字的字符(包括已存在的连字符),替换为空后统一转为大写,确保后续处理的是标准化的纯字符字符串,彻底解决重复连字符问题。 - 长度校验:添加长度判断,仅当清理后的字符串长度为7位时才执行格式化,避免对不符合规则的输入错误处理。
- 分段格式化:正则
^(.{2})(.{3})(.{2})$精准匹配7位字符串,将其拆分为前2位、中间3位、最后2位三组,通过$1-$2-$3拼接成目标格式。
内容的提问来源于stack exchange,提问作者Nuno Pacheco
相关产品推荐
相关产品推荐

