今天项目上碰到一个正则表达式的需求,需要限定整数位数为不超过7位的正数,可能包含一位小数位或者只能是正数,正则表达式的写法最重要的是思路的实现,在网上并没有找到很好的解决办法,首先是正数必须大于0,其次整数位也限定了7位,小数位如果有的话也只能一位,碰到这样的正则表达式最好是拆解成三部分:
1、整数位为7位+小数位为1位的验证 (^[0-9]{1,7}\.([0-9]{1})$)
2、整数为7位不包含小数位的非负数 (^[0-9]{1,7}$)
3、大于0的正数 (^\d*[1-9]\d*$)
拆解后可以看到,3式需要和2式进行逻辑与,合并后再与1进行逻辑或运算,故可以推到出:
(?=^\d*[1-9]\d*$)(^[0-9]{1,7}$)|(^[0-9]{1,7}\.([0-9]{1})$)
其中:“|”为逻辑或,而逻辑与可以写成(?=A)(B),A和B分别为两个正则表达式。
写个性化的正则表达式需要有一个较好的思路,如何拆解和组合很重要,不太建议采用逻辑非,实现起来不易,逻辑与和逻辑或是比较好的实现方式。