如何用JavaScript去除不规则空白符EMSP并校验Modem ID
解决方案
问题根源
原代码里的trim()只能移除ASCII范围内的空白字符(普通空格、制表符、换行符等),处理不了EMSP(全角空格,Unicode U+2003)这类非ASCII不规则空白符,导致这类空白可能被保留;同时原正则验证逻辑未针对性检测这类空白,出现不符合预期的放行情况。
修改后的代码
var modemID = source.u_modem_id.toString(); // 匹配所有Unicode空白符(含EMSP、ENSP、NBSP等不规则空白) var unicodeWhitespaceRegex = /\s/u; // 全局移除所有Unicode空白符 var cleanedModID = modemID.replace(/\s+/gu, ''); // 验证仅允许字母数字的正则 var alphanumericRegex = /^[a-zA-Z0-9]*$/; // 检测原Modem ID是否存在不规则空白符,存在则触发错误 if (unicodeWhitespaceRegex.test(modemID)) { log.error('Invalid Modem ID: Contains irregular whitespace characters.'); // 若需直接忽略该数据,可取消下一行注释 // ignore = true; } // 验证处理后的ID是否仅含字母数字,不合法则忽略 if (!alphanumericRegex.test(cleanedModID)) { log.error('Invalid Modem ID: Only numbers and letters are allowed.'); ignore = true; } // 后续可使用cleanedModID作为处理后的合法ID // source.u_modem_id = cleanedModID;
代码说明
\s/u:启用Unicode模式(u标志),让\s匹配所有Unicode标准定义的空白字符,覆盖EMSP这类不规则空白。replace(/\s+/gu, ''):通过全局匹配(g标志)移除所有Unicode空白符,彻底清理不规则空白。- 分两步验证:先检测原ID中的不规则空白并报错,再验证清理后的ID是否符合字母数字要求,同时保留清理后的可用ID。
内容的提问来源于stack exchange,提问作者Muhammad Arif Mohd Nai
相关产品推荐
相关产品推荐

