Skip to content

Form Validator Registry

@silver-formily/core 重新导出了 @silver-formily/validator 的注册中心 API,用来统一注册全局校验规则、格式、语言包和消息模板引擎。

这些注册都是全局生效的,会影响当前应用中的所有 Form 实例。

setValidateLanguage

描述

设置当前使用的校验语言。

签名

ts
interface setValidateLanguage {
  (language: string): void
}

用例

ts
import { setValidateLanguage } from '@silver-formily/core'

setValidateLanguage('en-US')
setValidateLanguage('zh-CN')

registerValidateFormats

描述

注册全局格式校验器。格式匹配器支持 stringRegExp 和函数。

当前内置格式可参考 @silver-formily/validator 文档中的内置格式

签名

ts
interface registerValidateFormats {
  (formats: {
    [key: string]: string | RegExp | ((value: any) => boolean)
  }): void
}

用例

ts
import { registerValidateFormats } from '@silver-formily/core'

registerValidateFormats({
  integer: /^[+-]?\d+$/,
  internalCode: value => typeof value === 'string' && value.startsWith('SF-'),
})

注册后即可在字段校验规则里通过 format 使用:

ts
field.setValidator({
  format: 'internalCode',
})

registerValidateLocale

描述

注册全局校验语言包。语言 key 通常使用 zh-CNen-US 这类值。

当前内置语言包可参考 @silver-formily/validator 文档中的内置语言包

签名

ts
interface registerValidateLocale {
  (locales: {
    [language: string]: {
      [key: string]: string | any
    }
  }): void
}

用例

ts
import {
  registerValidateLocale,
  setValidateLanguage,
} from '@silver-formily/core'

registerValidateLocale({
  'zh-CN': {
    required: '该字段是必填项',
    maxLength: '长度不能超过 {{maxLength}}',
  },
})

setValidateLanguage('zh-CN')

registerValidateMessageTemplateEngine

描述

注册全局校验消息模板引擎,用于在返回校验消息时自定义模板渲染逻辑。

签名

ts
interface registerValidateMessageTemplateEngine {
  (template: (message: ValidatorFunctionResponse, context: any) => any): void
}

用例

ts
import { registerValidateMessageTemplateEngine } from '@silver-formily/core'

registerValidateMessageTemplateEngine((message, context) => {
  return String(message).replace(/\{\{(\w+)\}\}/g, (_, key) => context[key] ?? '')
})

registerValidateRules

描述

注册全局校验规则,适合复用业务规则。

当前内置规则可参考 @silver-formily/validator 文档中的内置规则

签名

ts
interface registerValidateRules {
  (rules: {
    [key: string]: (
      value: any,
      rule: IValidatorRules,
      ctx: any,
      render: (message: string, scope?: any) => string,
    ) => ValidatorFunctionResponse | Promise<ValidatorFunctionResponse> | null
  }): void
}

用例

ts
import { registerValidateRules } from '@silver-formily/core'

registerValidateRules({
  usernameAvailable(value) {
    if (!value)
      return ''
    return value === 'silver' ? '' : '用户名已被占用'
  },
})

注册后即可在任意字段上复用:

ts
field.setValidator({
  usernameAvailable: true,
})

getValidateLocaleIOSCode

描述

根据传入语言值获取当前注册中心中最接近的语言标识。

签名

ts
interface getValidateLocaleIOSCode {
  (language: string): string | undefined
}

用例

ts
import { getValidateLocaleIOSCode } from '@silver-formily/core'

getValidateLocaleIOSCode('en')

// ==> en