IKExpressoin 校验使用说明

1.       介绍

IKExpressoin 是基于java 语言开发的轻量级的公式语言解析执行工具包,它不依赖第三方java,可作为.jar文件集成于系统中IKExpressoin 分为两部分,一是项目srcjava源代码,二是项目下的IKExpressoin.cfg.xml( 函数定义配置文件)文件。

2.       安装部署

IKExpressoin.jar 文件放到新部署项目的lib目录中

IKExpressoin.cfg.xml 文件放置代码根目录(如:web项目,WEB-INF/classes目录)

3.       主要调用类

org.wltea.expression.ExpressionEvaluator这个类是IKExpressoin 的主要调用类,打多数执行方法都在这里,此类下的方法都是静态的

org.wltea.expreesion.datameta.Variable 此类主要用于存放表达式上下文变量集合

org.wltea.expression.PreparedExpression需要表达式预编译时所要用到的类

4.       ExpressionEvaluator具体使用

1.先创建上下文变量集合

       ArrayList<Variable> variables = new ArrayList<Variable>();

variables.add(Variable.createVariable("vInt", new Integer(3)));

    variables.add(Variable.createVariable("vString", "testChar"));

    variables.add(Variable.createVariable("vDate",date));

    variables.add(Variable.createVariable("vDouble",newuble(223.0)));

    variables.add(Variable.createVariable("vBoolean", new Boolean(true)));

       第一参数的 vInt,vString 等只是我们对后面参数起的别名

       第二参数是我们要校验的数据,也可以是页面传过来的数据

2. 直接执行方法获取校验结果

Object  result = ExpressionEvaluator.evaluate("$contains(vString,\"testString\")", variables);

方法evaluate(参数1,参数2)分解如下

参数1 :自己定义的表达式公式

参数2 :   在第一步所创建的上下文集合

函数 $contains (参数1,参数2)分解如下

$是调用函数的规则在写的过程中必须带有

Contains函数名称,可以通过函数配置文件找到(用户自定义时可是是中文名称)

<function-configuration>

<bean class="org.wltea.expression.function.SystemFunctions">

    <function name="contains" method="contains">

        <parameter-type>java.lang.String</parameter-type>

        <parameter-type>java.lang.String</parameter-type>

    </function>

  </bean>

</function-configuration>

public class SystemFunctions {

   public boolean contains(String str1, String str2) {

      if (str1 == null || str2 == null) {

          throw new NullPointerException("函数\"CONTAINS\"参数为空");

      }

      return str1.indexOf(str2) >= 0;

   }

}

Bean节点里面的class 属性指定的是当前函数属于那个类

Function 节点 name 属性是我们执行调用的名称$contains名称必须和属性名称一样

   Funciont 节点 method 属性里的名称必须和类里面方法名称一样

parameter-type 里面的text是我们调用当前函数所必须提供的参数类型(在此要注意顺序)

 

参数1 vString就是上下文集合我们定义的需要校验的数据别名

参数2: 用户要校验的匹配内容是什么

 

执行后可通过result 来进行下一步操作

5.    PreparedExpression类的使用

1. 定义表达式公式

        String expression = "$contains(vString1,vString2)";

 

2.创建上下文变量集合

ArrayList<Variable> variables = new ArrayList<Variable>();

variables.add(Variable.createVariable("vString1", "testChar"));

variables.add(Variable.createVariable("vString2", "testChar"));

 

3.直接执行方法返回结果

PreparedExpression pe=ExpressionEvaluator.preparedCompile(expression,variables);

Object  result = pe.execute();

 

在校验出结果后可继续操作主要调用setArgument()方法

 

pe.setArgument("vString1", "testString");

pe.setArgument("vString2", "testString");

result = pe.execute();

得到result 结果后来进行下一步操作

 

6.       开发人员扩展函数

 

扩展前有以下几步要自己去编写(这里创建一个中文函数)

 

1.    创建一个类里面有我们要最加的函数,比如:

public class TestFunctions {

        public String sayHello(String str) {

               //函数主体

               return str;

       }  

    }

2.       IKExpressoin.cfg.xml来注册函数和类,将bean 节点添加到 function_configuration

 

<bean class="类路径.TestFunctions">

    <function name="你好" method="sayHello">

        <parameter-type>java.lang.String</parameter-type>

    </function>

</bean>

 

3.    调用自己定义的函数测试是否成功

ArrayList<Variable> variables = new ArrayList<Variable>();

variables.add(Variable.createVariable("vString", "测试用户"));

Object  result = ExpressionEvaluator.evaluate("$你好(vString)",variables);

  

7.    校验框架内置函数

1.    $contains(java.lang.String, java.lang.String) 字符串包含比较返回boolean

2.    $startWith(java.lang.Stirng, java.lang.String) 字符串前缀比较返回boolean

3.    $endWith(java.lang.String, java.lang.String) 字符串后缀比较返回boolean

4.    $calcDate(java.Util.Date(原始日期),int(),int(),int(),int(小时),int(),int()) 日期计算返回 Date

5.    $sysdate()  获取系统时间返回 Date

6.    $dayEquals(java.Util.Date,java.Util.Date) 日期比较,精确到天返回boolean

7.    $dateBig(java.Util.Date,java.Util.Date)日期比大,返回boolean

 

8.    项目扩展函数(以下函数按照项目需求会返回两种参数,一种为boolean,一种为对象org.wltea.expression.function.CheckResultBean(包含两个属性一个为错误code,一个为错误信息))函数名称比如$checkTypeRM后面带有RMReturnMessage)缩写词的都返回CheckResultBean对象,没有的均返回boolean 值。

1.    数据类型校验

$checkType(java.lang.String,java.lang.String),$checkTypeRM(java.lang.String,java,lang,String) 参数1为上下文集合变量,参数2为类型常量包含(varchar字符,email邮件,mobile手机,phone电话,postcode邮编,chineseName中文,money金额,number数字).

2.    空值校验

$checkNE(java.lang.String), $checkNERM(java.lang.String)

3.    最大值校验

$maxValue(java.lang.String,java.lang.String),$maxValueRM(java.lang,String,java.lang.String)

4.    最小值校验

$minValue(java.lang.String,java.lang.String),$minValueRM(java.lang,String,java.lang.String)

5.    最大长度校验

$maxLen(java.lang.String,int) ,$maxLenRM(java.lang,String,int)

6.    最小长度校验

$minValue(java.lang.String,int),$minValueRM(java.lang,String,int)

7.    枚举数据类型校验(手机)

$checkEnum(java.lang.String,java.lang.String),$checkEnumRM(java.lang,String,java.lang.String)

8.    CheckResultBean返回信息描述

Code

Message

Code

Message

000000

执行成功

010110

数据不在取值范围内

010101

不是有效的字符串

010201

不是有效的整数

010102

不是有效的邮箱

010202

不是有效的金额

010103

不是有效的手机号

010203

超过最大值限制

010104

不是有效的电话号码

010204

超过最小值限制

010105

不是有效的数字

010205

字符串长度超过最大长度限制

010106

包含非中文字符

010206

字符串长度低于最小长度限制

010107

不是有效的邮政编码

 

 

010108

不是有效的身份证

 

 

010109

数据为空

 

 

9.    多个函数校验使用(只能使用返回boolean类型的函数)

ExpressionEvaluator.evaluate("$checkNE(vString1)&&$checkType(vString1,varchar)||$contains(vString1,vString2))", variables);

 

10.语法约束

1.    变量名遵循java变量命名规范。

2.    函数声明以”$”符号打头,自定义函数命名遵循java命名规范。

3.    日期常量使用”[]”,格式应为[yyyy-MM-dd 24h-mm-ss],不支持毫秒

4.    用户自定义函数名不能重复

5.    用户自定义函数的参数和返回值类型限定于:

Int,Long,Float,Double,Boolean,String,Date,List,Object.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值