找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

201

主题

9909

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
15556

讲师达人悬赏达人微信认证勋章SpreadJS 认证SpreadJS 高级认证元老葡萄

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-3-7 18:04  /   查看:3645  /  回复:4
SpreadJS 中支持跟Excel一样的数据验证用来校验输入数据的正确性。而正则表达式是在日常开发中经常用的校验手段。Excel本身不支持数据验证时设置一个正则表达式来进行校验。但是SpreadJS具有高度灵活的优点,通过相应的扩展可以实现使用正则表达式来进行数据验证。接下来我们将一步一步实现这样的操作:在设置之前我们首先要在代码中重写条件格式的相关条件设置,代码如下:
创建一个用于正则校验的条件格式原型,原型继承GC.Spread.Sheets.ConditionalFormatting.Condition,之后重写evaluate方法
  1. function MyCondition (reg){
  2.     this.reg = reg;
  3.     GC.Spread.Sheets.ConditionalFormatting.Condition.apply(this, arguments);
  4. }
  5. MyCondition.prototype = new GC.Spread.Sheets.ConditionalFormatting.Condition();
  6. MyCondition.prototype.evaluate = function (evaluator, baseRow, baseColumn, actualObj) {
  7.     var reg = new RegExp(this.reg);
  8.     if (reg.test(actualObj)) {
  9.         return true;
  10.     }else{
  11.         return false;
  12.     }
  13. };
复制代码


SpreadJS数据验证支持DefaultDataValidator这种默认数据验证,创建时需要添加一个条件规则。这里的条件规则中我们就可以传入验证的正则表达式。代码如下所示:
首先,我们创建一个条件规则,并将正则表达式当做参数传入
  1. var nCondition = new MyCondition("^[0-9]*[1-9][0-9]*$");
复制代码

示例中我们的正则验证的是可以包含0开头但不能为0的一串数字
接下来创建一个DefaultDataValidator默认数据验证,并将上一步生成的条件规则对象传入
  1. var validator = new GC.Spread.Sheets.DataValidation.DefaultDataValidator(nCondition);
复制代码

之后,设置数据验证的类型为GC.Spread.Sheets.DataValidation.CriteriaType.custom 即自定义类型
  1. validator.type(GC.Spread.Sheets.DataValidation.CriteriaType.custom);
复制代码

这样就完成了正则数据验证的创建。
最后我们仍然通过设置数据验证的setDataValidator方法进行数据验证的设置,效果如下:
当我们在单元格中输入000时,验证出错:
image.png314087828.png
输入010时,验证成功:
image.png197800292.png

有关正则数据验证的相关demo,可以参考附件




自定义数据验证扩展正则校验.html

5.04 KB, 下载次数: 148

4 个回复

倒序浏览
zhaijunbao
注册会员   /  发表于:2021-8-25 11:21:36
沙发
请问怎么设置一列的正则呢
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-8-25 11:46:48
板凳
zhaijunbao 发表于 2021-8-25 11:21
请问怎么设置一列的正则呢

还是上面这个demo,将setDataValidator的第一个参数设为-1就是为一列设置数据验证
image.png580651855.png
回复 使用道具 举报
zhaijunbao
注册会员   /  发表于:2021-8-25 13:50:18
地板
Derrick.Jiao 发表于 2021-8-25 11:46
还是上面这个demo,将setDataValidator的第一个参数设为-1就是为一列设置数据验证

那如果是从某一列的第三行开始呢
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-8-25 14:50:19
5#
zhaijunbao 发表于 2021-8-25 13:50
那如果是从某一列的第三行开始呢

那就写个循环从第三行开始遍历setDataValidator,这是这个接口的参数 image.png30242308.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部