如何修改正则表达式避免匹配首尾空格且支持15-16位字符校验
解决方案
你原正则的问题在于首尾的\s*本身就允许前后存在空格,直接调整上限自然会出现15位字符加末尾空格被识别为16位匹配的问题,按需求调整后的正则分两种场景:
场景1:允许字符串中间带空格,仅禁止首尾空格
^\S(?:\s*\S){14,15}$
匹配逻辑说明:
- 开头强制匹配非空白字符,杜绝首空格
- 后续重复匹配「任意数量空格+1个非空白字符」14到15次,加上开头的1个非空白字符,总非空白字符数刚好是15~16个,覆盖你的长度需求
- 结尾最后一个匹配项是非空白字符,杜绝尾空格,完全避免15位有效字符加末尾空格被误判的问题
场景2:你的目标字符串本身不包含任何空格(比如你给出的示例ABCDFG001GRN-GH就没有空格)
直接用更简单的版本即可:
^\S{15,16}$
这个正则直接要求整个字符串全为非空白字符,长度刚好是15~16位,完全符合你的匹配要求。
内容的提问来源于stack exchange,提问作者Claire
相关产品推荐
相关产品推荐

