首页 > 其他分享 >某j 全局控制输入框不能输入表情符

某j 全局控制输入框不能输入表情符

时间:2024-12-17 18:56:15浏览次数:9  
标签:const rules value --- 输入框 rule return 全局 输入

在FormItem.vue文件中的function handleRules()添加两处表情正则校验,代码如下

效果:

 function handleRules(): ValidationRule[] {
      const { rules: defRules = [], component, rulesMessageJoinLabel, label, dynamicRules, required } = props.schema;
      if (isFunction(dynamicRules)) {
        const noEmoRule = dynamicRules(unref(getValues))
        noEmoRule.push( {
          required: false,
          validator: (_, value) => {
            const emojiRegex = /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/gi;
            if (emojiRegex.test(value)) {
              return Promise.reject("不能输入表情符号!");
            }
            return Promise.resolve();
          }
        })
        return noEmoRule as ValidationRule[];
      }

      let rules: ValidationRule[] = cloneDeep(defRules) as ValidationRule[];



      const { rulesMessageJoinLabel: globalRulesMessageJoinLabel } = props.formProps;

      const joinLabel = Reflect.has(props.schema, "rulesMessageJoinLabel") ? rulesMessageJoinLabel : globalRulesMessageJoinLabel;
      const defaultMsg = createPlaceholderMessage(component) + `${joinLabel ? label : ""}`;

      function validator(rule: any, value: any) {
        const msg = rule.message || defaultMsg;
        if (value === undefined || isNull(value)) {
          // 空值
          return Promise.reject(msg);
        } else if (Array.isArray(value) && value.length === 0) {
          // 数组类型
          return Promise.reject(msg);
        } else if (typeof value === "string" && value.trim() === "") {
          // 空字符串
          return Promise.reject(msg);
        } else if (typeof value === "object" && Reflect.has(value, "checked") && Reflect.has(value, "halfChecked") && Array.isArray(value.checked) && Array.isArray(value.halfChecked) && value.checked.length === 0 && value.halfChecked.length === 0) {
          // 非关联选择的tree组件
          return Promise.reject(msg);
        }
        return Promise.resolve();
      }

      const getRequired = isFunction(required) ? required(unref(getValues)) : required;

      if ((!rules || rules.length === 0) && getRequired) {
        rules = [{ required: getRequired, validator }];
      }

      const requiredRuleIndex: number = rules.findIndex((rule) => Reflect.has(rule, "required") && !Reflect.has(rule, "validator"));

      if (requiredRuleIndex !== -1) {
        const rule = rules[requiredRuleIndex];
        const { isShow } = getShow();
        if (!isShow) {
          rule.required = false;
        }
        if (component) {
          //update-begin---author:wangshuai---date:2024-02-01---for:【QQYUN-8176】编辑表单中,校验必填时,如果组件是ApiSelect,打开编辑页面时,即使该字段有值,也会提示请选择---
          //https://github.com/vbenjs/vue-vben-admin/pull/3082 github修复原文
          /*if (!Reflect.has(rule, 'type')) {
              rule.type = component === 'InputNumber' ? 'number' : 'string';
            }*/
          //update-end---author:wangshuai---date:2024-02-01---for:【QQYUN-8176】编辑表单中,校验必填时,如果组件是ApiSelect,打开编辑页面时,即使该字段有值,也会提示请选择---

          rule.message = rule.message || defaultMsg;

          if (component.includes("Input") || component.includes("Textarea")) {
            rule.whitespace = true;
          }
          const valueFormat = unref(getComponentsProps)?.valueFormat;
          setComponentRuleType(rule, component, valueFormat);
        }
      }

      // Maximum input length rule check
      const characterInx = rules.findIndex((val) => val.max);
      if (characterInx !== -1 && !rules[characterInx].validator) {
        rules[characterInx].message = rules[characterInx].message || t("component.form.maxTip", [rules[characterInx].max] as Recordable);
      }
      // update-begin--author:liaozhiyang---date:20241226---for:【QQYUN-7495】pattern由字符串改成正则传递给antd(因使用InputNumber时发现正则无效)
      rules.forEach((item) => {
        if (typeof item.pattern === "string") {
          try {
            const reg = new Function("item", `return ${item.pattern}`)(item);
            if (Object.prototype.toString.call(reg) === "[object RegExp]") {
              item.pattern = reg;
            } else {
              item.pattern = new RegExp(item.pattern);
            }
          } catch (error) {
            item.pattern = new RegExp(item.pattern);
          }
        }
      });

      // update-end--author:liaozhiyang---date:20231226---for:【QQYUN-7495】pattern由字符串改成正则传递给antd(因使用InputNumber时发现正则无效)
      rules.push({
        required: false,
        validator: (_, value) => {
          const emojiRegex = /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/gi;
          if (emojiRegex.test(value)) {
            return Promise.reject("不能输入表情符号!");
          }
          return Promise.resolve();
        }
      })
      return rules;
    }

标签:const,rules,value,---,输入框,rule,return,全局,输入
From: https://blog.csdn.net/zhaofuqiangmycomm/article/details/144542146

相关文章

  • 【YashanDB知识库】如何处理yasql输入交互模式下单行字符总量超过限制4000字节
    现象在yasql执行sql语句后报错:YASQL-00021inputlineoverflow(>4000byteatline4)原因yasql在交互模式模式下单行字符总量限制4000字节,超出该限制即报错。交互式模式下,yasql会显示一个提示符,通常是SQL>,等待用户输入命令,用户执行的每个命令都会立即执行,并显示结果。......
  • Python中构建全局字典的详细指南
    在Python编程中,全局变量是指在整个程序运行期间都可以访问的变量。全局字典作为一种特殊的全局变量,可以存储各种类型的数据,包括字符串、数字、列表、元组等,这使得它在数据管理和跨模块通信方面非常有用。本文将详细介绍如何在Python中构建和使用全局字典,包括理论概述和代码示例。......
  • 20241213-局部变量和全局变量的思考
    for循环或while循环、方法或方法参数列表里定义的局部变量,在其内的代码块执行完毕后就被销毁了,不能再用了。1.A方法的局部变量a作为B方法的传入参数,在B方法内对该传入参数的运算不会对A方法的局部变量a产生影响。见下代码:publicclassArrayReference{ publicstaticvoid......
  • 解决“无法定位程序输入点”错误的三种有效方法
    解决“无法定位程序输入点”错误的三种有效方法在使用电脑的过程中,我们有时会遇到“无法定位程序输入点于某个文件上”的错误提示。这种错误通常是由DLL文件版本不匹配或缺失引起的。DLL(动态链接库)文件是Windows操作系统中用于存储共享代码和数据的文件,许多应用程序都依赖于这......
  • 线性电源 单电源供电 正负双路输出 万分之一纹波 高转换效率 输入3~40V,输出线性电压±
    线性电源单电源供电正负双路输出万分之一纹波高转换效率输入3~40V,输出线性电压±2.5~32V可调低纹波双路可调线性电源宽电压输入输出高转换效率BSN30WL是一款宽电压输入的升降压、正负电压线性电源。它具有多种应用场景,例如用于精密运放的正负电源、模数和数模转换的供电......
  • java poi 限定单元格只能输入数字
    importorg.apache.poi.ss.usermodel.*;importorg.apache.poi.ss.util.*;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;publicclassEasyPoiNumberValidation{publicstaticvoidmain(String[]args){Workbookworkbook=newXSSFWorkbook();......
  • 江科大STM32学习:07 定时器输入捕获
    本节对应STM32F10XXX参考手册中的14.3.5输入捕获模式和14.3.6PWM输入模式1.输入捕获简介IC(InputCapture)输入捕获输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形输入捕获模式下,当通道输入引脚出......
  • Linux中输入和输出基本过程
    1.文件内核级缓冲区前面在如何理解Linux一切皆文件的特点中提到为了保证在Linux中所有进程访问文件时的方式趋近相同,在file结构体中存在一个files_operations结构体指针,对应的结构体保存所有文件操作的函数指针(这个结构体也被称为操作表)每一个file结构体中除了有自己......
  • 华为OD机试真题---九宫格按键输入
    一、题目描述九宫格按键输入,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母,如果输入""或者其他字符,则循环中断,输出此时停留的字母。数字和字母的对应关系如下,注意0只对应空格:输入一串按键,要求输出屏幕显示......
  • bootstrap4标签输入框插件
    这是一款基于Bootstrap4的标签输入框插件。该插件使用Bootstrap4badge组件来制作标签输入和移除的效果。 在线演示 下载  使用方法在页面中引入下面的文件。<linkhref="bootstrap.min.css"rel="stylesheet"type="text/css"/><linkhref="jquery-tagsinp......