求验证特定格式十进制数的正则表达式
正则表达式解决方案:整数部分最多18位,小数部分最多2位
没问题,这就给你一个完全符合需求的正则表达式,我会拆解每个部分帮你搞清楚逻辑:
^(\d{1,18})(\.\d{1,2})?$
规则拆解
^:锚定字符串的起始位置,确保匹配从开头开始,不会漏掉前面的非法字符(\d{1,18}):匹配1到18位数字的整数部分,\d代表任意数字,{1,18}严格限定了长度范围(\.\d{1,2})?:可选的小数部分,?表示这个分组可以出现0次(也就是没有小数的纯整数)或1次:\.:匹配小数点(必须转义,因为.在正则里是匹配任意字符的通配符)\d{1,2}:匹配1到2位数字的小数部分
$:锚定字符串的结束位置,确保后面没有多余的非法字符
验证示例
有效匹配(符合规则)
18.50:整数部分2位(≤18),小数部分2位,完全匹配5556.50:整数部分4位,小数部分2位,符合要求123456789012345678:18位纯整数,小数部分可选,也能匹配999.9:小数部分1位,同样有效
无效匹配(不符合规则)
18.555:小数部分3位,超出最多2位的限制,无法匹配5879.5877:小数部分4位,不符合要求1234567890123456789:整数部分19位,超过最多18位的限制,不匹配.12:缺少整数部分,无法匹配(如果需要支持这种场景,可以调整正则,不过你的示例里没有这类情况,所以默认不包含)
额外扩展(可选)
如果需要禁止整数部分的前导零(比如不想匹配0018.50这种格式,但允许0.50或单独的0),可以用这个版本:
^(0|[1-9]\d{0,17})(\.\d{1,2})?$
内容的提问来源于stack exchange,提问作者Pratik Bhavsar
相关产品推荐
相关产品推荐

