整数和两位以内小数的正则表达式_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 整数和两位以内小数的正则表达式

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

 2014/11/19 13:10:15  leelfcn  程序员俱乐部  我要评论(0)
  • 摘要:工作中遇到要在后台校验金额格式,草草看了下正则表达式,写了第一个Stringregex_normal="[0-9]{1,14}\\.{0,1}[0-9]{0,2}";//16位整数或小数(两位);中括号[0-9]表示0到9这10个数字,花括号{1,14}表示可以出现次数为1到14次,后面同理。其中小数点\\.第一个反斜杠是java的转义,第二个是对.的转义。仔细看了下,发现有bug,对1.这样的金额也能通过。改进一下Stringregex_strict="[0-9]{1,14}(\\.{0,1
  • 标签:正则表达式 表达式 正则
工作中遇到要在后台校验金额格式,草草看了下正则表达式,写了第一个
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比较。
发表评论
用户名: 匿名