表单验证规则定制示例

验证功能实现概览

构建智能表单验证系统,实现邮箱、手机号、日期等字段的实时验证

此示例演示如何为表单字段添加自定义验证规则。您将学习如何实现邮箱格式验证手机号验证日期有效性检查等常见验证场景,并提供实时反馈给用户。

验证系统核心特性

  • 📧 邮箱格式验证:标准邮箱地址格式检查
  • 📱 手机号码验证:国际化手机号格式支持
  • 📅 日期有效性验证:证件过期检查和预警
  • 🎯 实时验证反馈:输入即时验证,提升用户体验
  • 🔧 自定义错误消息:友好的错误提示信息
  • 手动触发验证:支持表单整体验证检查

关键功能

  • 邮箱格式验证
  • 手机号码格式验证
  • 证件有效期验证
  • 手动触发表单验证

代码示例

/**
* 示例6: 自定义验证规则
* 功能:为表单字段添加自定义验证规则
*/
(function () {
kinlink.events.on(kinlink.FormEvents.FORM_LOADED, () => {
  try {
    const form = kinlink.formApi;

    // 为邮箱字段添加格式验证
    form.addFieldValidator('文字列__1行__3', (value) => {
      if (!value) return; // 非必填,空值不验证

      const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
      if (!emailRegex.test(value)) {
        return '请输入有效的邮箱地址';
      }
      return undefined; // 验证通过
    });

    // 为手机号字段添加格式验证
    form.addFieldValidator('文字列__1行__2', (value) => {
      if (!value) return; // 非必填,空值不验证

      // 简单的手机号验证规则(不限制国家/地区前缀)
      const phoneRegex = /^\+?[0-9]{7,15}$/;
      if (!phoneRegex.test(value)) {
        return '请输入有效的手机号码(7-15位数字,可以包含+号前缀)';
      }
      return undefined; // 验证通过
    });

    // 为护照有效期添加未过期验证
    form.addFieldValidator('日期_2', (value) => {
      if (!value) return; // 非必填,空值不验证

      const today = new Date();
      const expiryDate = new Date(value);

      // 确保日期有效
      if (isNaN(expiryDate.getTime())) {
        return '请输入有效的日期';
      }

      // 检查是否已过期
      if (expiryDate < today) {
        return '护照/证件已过期,请提供有效期内的证件';
      }

      // 检查是否即将过期(小于6个月)
      const sixMonthsLater = new Date();
      sixMonthsLater.setMonth(today.getMonth() + 6);

      if (expiryDate < sixMonthsLater) {
        // 这是警告而非错误,需手动显示
        form.showWarning(
          '您的护照/证件将在6个月内过期,可能影响某些国家/地区的入境要求',
        );
      }

      return undefined; // 验证通过
    });

    // 添加手动触发验证的按钮
    const validateButton = document.createElement('button');
    validateButton.textContent = '验证表单';
    validateButton.style.margin = '10px 0';
    validateButton.style.padding = '8px 16px';
    validateButton.style.backgroundColor = '#3498db';
    validateButton.style.color = 'white';
    validateButton.style.border = 'none';
    validateButton.style.borderRadius = '4px';
    validateButton.style.cursor = 'pointer';

    validateButton.addEventListener('click', () => {
      const result = form.validateForm();
      console.log('验证结果:', result);

      if (result.isValid) {
        form.showSuccess('表单验证通过');
      } else {
        form.showError('表单验证失败,请检查输入');
      }
    });

    // 添加按钮到表单
    const formElement = document.querySelector('.ant-form') || document.body;
    formElement.insertBefore(validateButton, formElement.firstChild);
  } catch (error) {
    console.error('添加自定义验证规则失败:', error);
  }
});
})();

使用说明

要使用此功能,只需将代码复制到您的kinlink自定义JavaScript中。根据您的表单字段,修改代码中的字段代码和验证规则。您可以为任何字段添加自定义验证逻辑。

完整代码请下载查看:

6-自定义验证规则.js

注意事项

验证函数返回错误消息字符串表示验证失败,返回undefined表示验证通过。您可以为任何字段添加多个验证规则。

API参考

此示例使用了以下kinlink API:
  • kinlink.events.on(eventName, callback) - 注册事件监听器

  • kinlink.FormEvents.FORM_LOADED - 表单加载完成事件

  • kinlink.formApi.addFieldValidator(fieldCode, validatorFunction) - 为指定字段添加自定义验证规则

  • kinlink.formApi.validateForm() - 手动触发整个表单的验证

  • kinlink.formApi.showSuccess(message) - 显示成功消息

  • kinlink.formApi.showError(message) - 显示错误消息

  • kinlink.formApi.showWarning(message) - 显示警告消息