Java如何编写匹配2个小数点、整数最多4位每段小数最多2位的正则
符合要求的正则验证规则
你可以使用如下正则满足所有校验规则:
^\d{1,4}(?:\.\d{1,2}){0,2}$
如果需要兼容不支持\d语法的老旧正则引擎,可替换为全量字符写法:
^[0-9]{1,4}(?:\.[0-9]{1,2}){0,2}$
如果你的校验环境不支持非捕获分组,去掉正则中的?:即可正常使用,不影响匹配结果。
规则匹配说明
- 开头
^\d{1,4}:匹配1-4位的整数前缀,满足「整数部分最多4位数字」的要求 - 中间
(?:\.\d{1,2}):为匹配单元,对应「小数点+1到2位数字」的结构,满足「每个小数点后最多2位数字」的要求 - 结尾
{0,2}$:限定前面的匹配单元可以出现0次、1次或者2次,刚好对应无小数点、1个小数点、2个小数点的三种合法场景
如果你的业务允许小数点后留空(例如1234.这类格式),把正则中的\d{1,2}调整为\d{0,2}即可。
原有正则的问题说明
你之前编写的^[0-9]{1,4}(\.[0-9]{0,2})(\.[0-9]{0,2})?$无法覆盖全场景的核心原因是:第一个(\.[0-9]{0,2})分组没有加可选量词,意味着必须至少出现1个小数点,所以无法匹配纯整数的yyyy格式,同时分组的写法也限制了结构的灵活性。
校验效果验证
合法场景全部覆盖
- 纯整数:
1234 - 1个小数点1位小数:
1234.1 - 2个小数点各1位小数:
1234.1.2 - 2个小数点第二位2位小数:
1234.1.22 - 2个小数点第一位2位小数:
1234.11.2 - 2个小数点都2位小数:
1234.11.22
非法场景全部拦截
1234.111.22:第一个小数点后有3位数字,匹配失败1234.11.222:第二个小数点后有3位数字,匹配失败
内容的提问来源于stack exchange,提问作者Mands
相关产品推荐
相关产品推荐

