求助:编写匹配1-8(含可选小数位)数字的正则表达式
整数部分限1-8的数字校验正则方案
校验规则要求
- 仅认可整数部分取值在1-8区间的数字
- 同时支持纯整数(不带小数点)、带小数两种格式
- 整数部分超出1-8范围的数值,无论是否带小数均判定为非法
匹配示例参考:
合法值:
- 纯整数:
1、3、8- 带小数:
2.00、4.45、7.60非法值:
9、10、9.00、50.40
原有正则的问题
你之前编写的正则^([0-8]$\.?[0-8]*|\.[0-8]+)存在3个核心错误:
- 结束符
$位置错误,放在了整数匹配片段的中间,导致匹配到1-8的整数后就直接终止校验,后续的小数部分完全不会进入匹配逻辑 - 允许整数部分为0,不符合整数部分1-8的范围要求
- 分支逻辑中存在单独匹配
.xxx格式的规则,会漏掉整数部分校验,导致无整数部分的纯小数串被误判为合法
正确正则写法
如果仅限制整数部分范围,小数部分允许0-9任意数字,使用以下正则:
^[1-8](\.\d+)?$
如果业务同时要求小数部分也只能输入0-8的数字,将正则调整为:
^[1-8](\.[0-8]+)?$
规则说明
^:匹配字符串开头[1-8]:匹配整数部分,限定只能是1-8之间的单个数字,从根源排除0、9以及两位及以上整数(比如10、50)的非法情况(\.\d+)?:可选的小数部分组,?表示该组可以出现0次(对应纯整数场景)或1次(对应带小数场景);组内\.匹配小数点,\d+匹配小数点后至少1位数字,避免出现3.这种末尾悬空小数点的非法格式$:匹配字符串结尾,确保整个字符串完全符合规则,不会出现局部匹配漏判的情况
内容的提问来源于stack exchange,提问作者thelandog
相关产品推荐
相关产品推荐

