找回密码
 立即注册

QQ登录

只需一步,快速开始

liushiniao

初级会员

31

主题

76

帖子

269

积分

初级会员

积分
269

活字格认证微信认证勋章

liushiniao
初级会员   /  发表于:2019-4-30 14:02  /   查看:4648  /  回复:5
本帖最后由 liushiniao 于 2019-4-30 14:08 编辑

您好,我想做一个数据校验,需要验证手机号、身份证号、ip地址等自定义的数据校验,详情官方提供一个demo,通过代码应该怎么设置,怎么使用,非常感谢!!

demo已在别的帖子找到,谢谢

另外还有一点,比如我设置了单元格为必填项的校验以后,还需要必须符合身份证号,类似于这样同一个单元格有多个校验规则的怎么处理?请指导,谢谢

5 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-5-6 18:24:49
推荐
您好,我给您提供一个功能完整的示例,比学习指南这个更简洁一些,您参考一下。

DataValidator_grb.html

5.25 KB, 下载次数: 154

回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-30 17:36:32
沙发
您好,SpreadJS单元格校验原生并不支持多条件校验,不过您的这个校验规则,实际上可以作为非空校验+规则校验。请参考一下学习指南:
https://demo.grapecity.com.cn/Sp ... customDataValidator

其中有一个ignoreBlank的参数,可以解决非空验证的问题。

当然,多条件校验也可以实现,但实际上可以通过一些思路来实现,参考以下代码:

  1. $(document).ready(function() {
  2.         var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount : 1 });

  3.         var spreadNS = GC.Spread.Sheets;

  4.         var validators = [{
  5.             validator : "A2<=A1",
  6.             error_message: "error_1: A2<=A1"
  7.         },{
  8.             validator : "A3<=A1",
  9.             error_message: "error_2: A3<=A1"
  10.         },{
  11.             validator : "A1=A4+A5+A6",
  12.             error_message: "error_3: A1=A4+A5+A6"
  13.         },{
  14.             validator : "A1=B1+C1-D1",
  15.             error_message: "error_4: A1=B1+C1-D1"
  16.         },{
  17.             validator : "A1<>0",
  18.             error_message: "error_5: A1<>0"
  19.         }];

  20.         validators = [{
  21.             validator: "A1>B1",
  22.             error_message: "error_1: 得分应小于标准分!"
  23.         }, {
  24.             validator: "A1>0",
  25.             error_message: "error_1: 得分不能为负数!"
  26.         }];

  27.         var current_sheet = spread.getActiveSheet();

  28.         current_sheet.setValue(0, 0, 15);
  29.         current_sheet.setValue(1, 0, 1);
  30.         current_sheet.setValue(2, 0, 15);
  31.         current_sheet.setValue(3, 0, 4);
  32.         current_sheet.setValue(4, 0, 5);
  33.         current_sheet.setValue(5, 0, 6);
  34.         current_sheet.setValue(0, 1, 9);
  35.         current_sheet.setValue(0, 2, 8);
  36.         current_sheet.setValue(0, 3, 2);

  37.         var rowIndex = 1;
  38.         var colIndex = 1;
  39.         var cell = current_sheet.getCell(rowIndex, colIndex);

  40.         $("#run").click(function () {
  41.             validators.some(function (obj) {
  42.                 let tmpValidator = new GC.Spread.Sheets.DataValidation.createFormulaValidator(obj.validator);
  43.                 tmpValidator.errorTitle("error");
  44.                 tmpValidator.errorMessage(obj.error_message);
  45.                 tmpValidator.ignoreBlank(false);
  46.                 current_sheet.setDataValidator(rowIndex, colIndex, tmpValidator);
  47.                 let vad = current_sheet.getDataValidator(rowIndex, colIndex);
  48.                 if( vad.isValid( current_sheet, rowIndex, colIndex, parseInt(cell.value())) ){
  49.                     cell.backColor("green");
  50.                 }else{
  51.                     cell.backColor("red");
  52.                     alert("error:" + obj.error_message);
  53.                     return true;
  54.                 }
  55.                 current_sheet.setDataValidator(rowIndex, colIndex, null);
  56.             });
  57.         });
  58.     });
复制代码
回复 使用道具 举报
liushiniao
初级会员   /  发表于:2019-5-6 17:13:46
板凳
本帖最后由 liushiniao 于 2019-5-6 17:15 编辑

非常感谢,就是这个我们设计的时候正则表达式的校验是正确的,我是在这个页面上增加了一个正则表达式的校验选项,设计的时候依据
  1. var nCondition = new MyCondition(
  2.             "^[0-9]*[1-9][0-9]*[        DISCUZ_CODE_0        ]quot;);
  3.         var validator = new GC.Spread.Sheets.DataValidation.DefaultDataValidator(nCondition);
  4.         validator.type(GC.Spread.Sheets.DataValidation.CriteriaType.custom);

  5.     function MyCondition (reg){
  6.                 this.reg = reg;
  7.         GC.Spread.Sheets.ConditionalFormatting.Condition.apply(this, arguments);
  8.     }
  9.     MyCondition.prototype = new GC.Spread.Sheets.ConditionalFormatting.Condition();
  10.     MyCondition.prototype.evaluate = function (evaluator, baseRow, baseColumn, actualObj) {
  11.                 var reg = new RegExp(this.reg);
  12.                 if (reg.test(actualObj)) {
  13.                    return true;
  14.                 }else{
  15.                    return false;
  16.                 }

  17.     };
复制代码

可以实现数据的校验,但是模板保存后,填写数据的时候,校验规则就失效了,不管填写的内容是否符合校验规则都会标亮,提示不合法,请问大概是什么原因造成的?还是我必须将单元格的正则表达式保存到库里面,页面初始化后,再将校验规则取出重新渲染页面才可以?
111.png
回复 使用道具 举报
liushiniao
初级会员   /  发表于:2019-5-7 08:52:19
5#
非常感谢
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-5-7 10:45:47
6#
不客气,希望解决了您的问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部