Regex101测验第11题:合法浮点数格式校验正则问题求助
浮点数校验正则修正方案
问题原因
你当前使用的正则中\d*([.,]\d*)?部分允许小数点前后均无数字,因此会错误匹配仅含单个小数点的非法输入。
修正后的正则表达式
/^[+-]?(?:\d+[.,]?\d*|[.,]\d+)(?:[Ee][+-]?\d+)?$/g
如果你的校验规则不允许类似123.这种末尾带小数点的格式,可使用以下版本:
/^[+-]?(?:\d+(?:[.,]\d+)?|[.,]\d+)(?:[Ee][+-]?\d+)?$/g
规则说明
- 保留你原有需求的全部合法场景:支持正负号前缀、逗号/圆点作为小数分隔符、大小写E开头的科学计数法、指数部分支持正负号
- 通过非捕获组
(?:\d+[.,]?\d*|[.,]\d+)限定:要么整数部分至少有1位数字,要么小数部分至少有1位数字,完全排除仅单个小数点的非法情况 - 合法匹配示例:
3.14159、.123、123.、+1.2e-5、-4,5E6、100 - 非法匹配示例:
.、+-.、e12、12e
内容的提问来源于stack exchange,提问作者gaurav sabharwal
相关产品推荐
相关产品推荐

