编写排除逗号分隔格式的下划线数字串校验正则表达式
正则调整方案
你原来的正则存在几个核心问题:
- 缺少首尾锚定,会出现部分匹配的情况,只要字符串结尾不是逗号就会被误判为合法,比如
1_2,3这类带逗号的串也会被匹配到前半段 - 字符组
[1-9+_]中误写了+,会把+符号识别为合法字符 - 没有限制下划线的位置,会匹配到开头/结尾带下划线、连续下划线的非法格式
- 语法存在缺失,少了闭合的右括号
符合要求的正则写法
根据你的需求,合法格式是仅由下划线分隔的数字串,分两种场景选择:
- 允许数字段以0开头(比如
0_123_45合法)
^\d+(?:_\d+)*$
- 要求数字段必须以非0数字开头(和你原正则的
[1-9]逻辑一致,比如0_123非法)
^[1-9]\d*(?:_[1-9]\d*)*$
如果要求必须至少存在一个下划线分隔符,把正则末尾的*改成+即可。
规则解释
^和$分别匹配字符串的开头和结尾,确保整个字符串完全符合规则,不会出现部分匹配的问题\d+匹配至少1位数字,非0开头的场景替换为[1-9]\d*即可(?:_\d+)*是非捕获组,匹配0次或多次「下划线+数字段」的组合,从语法上限制了下划线只能出现在两个数字段中间,避免开头/结尾下划线、连续下划线的非法情况
测试验证
- 合法用例匹配:
1、1_2_3、123_456_789均能正常匹配 - 非法用例拦截:
1_2_3,1_3、_1_2、1_2_、1__2均无法匹配
内容的提问来源于stack exchange,提问作者Alexandra Diaconu
相关产品推荐
相关产品推荐

