React Native正则如何实现仅开头可选单个负号的1-4位数字匹配
React Native 带可选开头负号的数字输入正则修正方案
原有代码错误原因
- 第一版正则
/^[0-9]{1,4}$/g仅支持匹配1-4位纯数字,没有预留开头可选负号的匹配逻辑,因此无法识别-1这类合法负数字符串 - 第二版正则
/-?!/^[0-9]{1,4}$/g存在语法错误:正则边界符/被错误插入表达式中间,负向预查语法?!位置完全错误,无法正常执行匹配 - 额外注意:不建议在这类单次校验场景给正则加全局标记
g,test()方法搭配g标记会缓存上次匹配的索引位置,容易出现偶发匹配结果不准的问题
正确实现代码
按照需求(负号仅允许出现在开头、最多1次、可省略,负号后必须跟1-4位数字,禁止负号出现在中间/末尾),正则写法如下:
// 正则拆解:^ 匹配字符串开头 -> -? 匹配0或1个开头负号 -> [0-9]{1,4} 匹配1-4位数字 -> $ 匹配字符串结尾 const validNumberReg = /^-?[0-9]{1,4}$/ // minCheck为true代表输入不符合规则,false代表输入合法 let minCheck = !validNumberReg.test(valueRange.minValue)
匹配效果说明
- 可通过校验的合法输入:
1、99、123、1234、-1、-99、-123、-1234 - 会被拦截的非法输入:
-(仅负号无数字)、1-3(负号在数字中间)、25-(负号在末尾)、--12(多个负号)、12345(数字长度超4位)、1.5(带小数点)、a3(含非数字字符)
内容的提问来源于stack exchange,提问作者user15322469
相关产品推荐
相关产品推荐

