整数和两位以内小数的正则表达式

工作中遇到要在后台校验金额格式,草草看了下正则表达式,写了第一个
String regex_normal = "[0-9]{1,14}\\.{0,1}[0-9]{0,2}";//16位整数或小数(两位);
中括号[0-9]表示0到9这10个数字,花括号{1,14}表示可以出现次数为1到14次,后面同理。
其中小数点 \\. 第一个反斜杠是java的转义,第二个是对 . 的转义。
仔细看了下,发现有bug,对 1. 这样的金额也能通过。
改进一下
String regex_strict = "[0-9]{1,14}(\\.{0,1}[0-9]{1,2})?";//16位整数或小数(两位);
多了()?, ? 表示圆括号内容可惜重复1或0次。
测试源码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegexpTest {
public static void main(String[] args){
Pattern pattern_normal;
Pattern pattern_strict;
String regex_normal = "[0-9]{1,14}\\.{0,1}[0-9]{0,2}";//16位整数或小数(两位);
String regex_strict = "[0-9]{1,14}(\\.{0,1}[0-9]{1,2})?";//16位整数或小数(两位);
String integer_1 = "1";
String integer_2 = "12";
String integer_3 = "123";
String float_1 = "1.2";
String float_2 = "1.23";
String float_3 = "1.234";
String float_0 = "1.";
pattern_normal = Pattern.compile(regex_normal);
pattern_strict = Pattern.compile(regex_strict);
System.out.println("pattern_normal 匹配 " + integer_1 + " :" + pattern_normal.matcher(integer_1).matches());
System.out.println("pattern_strict 匹配 " + integer_1 + " :" + pattern_strict.matcher(integer_1).matches());
System.out.println("pattern_normal 匹配 " + integer_2 + " :" + pattern_normal.matcher(integer_2).matches());
System.out.println("pattern_strict 匹配 " + integer_2 + " :" + pattern_strict.matcher(integer_2).matches());
System.out.println("pattern_normal 匹配 " + integer_3 + " :" + pattern_normal.matcher(integer_3).matches());
System.out.println("pattern_strict 匹配 " + integer_3 + " :" + pattern_strict.matcher(integer_3).matches());
System.out.println("pattern_normal 匹配 " + float_0 + " :" + pattern_normal.matcher(float_0).matches());
System.out.println("pattern_strict 匹配 " + float_0 + " :" + pattern_strict.matcher(float_0).matches());
System.out.println("pattern_normal 匹配 " + float_1 + " :" + pattern_normal.matcher(float_1).matches());
System.out.println("pattern_strict 匹配 " + float_1 + " :" + pattern_strict.matcher(float_1).matches());
System.out.println("pattern_normal 匹配 " + float_2 + " :" + pattern_normal.matcher(float_2).matches());
System.out.println("pattern_strict 匹配 " + float_2 + " :" + pattern_strict.matcher(float_2).matches());
System.out.println("pattern_normal 匹配 " + float_3 + " :" + pattern_normal.matcher(float_3).matches());
System.out.println("pattern_strict 匹配 " + float_3 + " :" + pattern_strict.matcher(float_3).matches());
}
}

输出:

pattern_normal 匹配 1 :true
pattern_strict 匹配 1 :true
pattern_normal 匹配 12 :true
pattern_strict 匹配 12 :true
pattern_normal 匹配 123 :true
pattern_strict 匹配 123 :true
pattern_normal 匹配 1. :true
pattern_strict 匹配 1. :false
pattern_normal 匹配 1.2 :true
pattern_strict 匹配 1.2 :true
pattern_normal 匹配 1.23 :true
pattern_strict 匹配 1.23 :true
pattern_normal 匹配 1.234 :false
pattern_strict 匹配 1.234 :false


还想对0 0.0 0.00这样的金额过滤,暂时不知道怎么写,希望高手帮忙。现在暂时是先格式校验通过后再用数值和0比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值