如何编写Survey123正则表达式以支持0.05增量的小数输入?
问题原因与修正方案
错误原因分析
你修改后的正则表达式^\d{0,2}(?:.[0-9][0,5])?$存在三个关键问题:
- 小数点未转义:正则中的
.是通配符,会匹配任意单个字符(比如字母、符号),而非字面意义的小数点,必须用\.表示真实的小数点。 - 字符组写法错误:
[0,5]的写法会匹配0、逗号、5三个字符,而非你预期的0或5,正确的字符组应该是[05](去掉多余的逗号)。 - 结构限制过严:你的正则强制要求小数部分必须是两位,而你需要允许一位小数的输入(比如
9.1等价于9.10,属于0.05增量的合法值),因此结构上需要支持一位或两位小数的情况。
正确的正则表达式
针对Survey123的需求,允许输入以0.05为增量的两位小数(含一位小数简写、整数),正确的正则如下:
^\d{0,2}(?:\.(?:[0-9]|[0-9][05]))?$
正则各部分解释
^\d{0,2}:匹配开头0-2位数字(支持整数输入,也允许.05这类无整数部分的输入)(?:\.(?:[0-9]|[0-9][05]))?:可选的小数部分:\.:匹配字面小数点[0-9]:匹配一位0-9的数字(支持9.1这类一位小数简写)[0-9][05]:匹配两位数字且末位为0或5(支持9.10、9.15这类标准两位小数)?:表示小数部分整体可选(即允许纯整数输入)
可选优化(禁止单独小数点)
如果需要禁止仅输入.的无效情况,可以调整为:
^(?:\d{1,2}|\d{0,2}\.(?:[0-9]|[0-9][05]))$
内容的提问来源于stack exchange,提问作者Sean Robertson
相关产品推荐
相关产品推荐

