diff --git a/src/field/index.js b/src/field/index.js index 965f84707..f3fd0d6e4 100644 --- a/src/field/index.js +++ b/src/field/index.js @@ -21,6 +21,7 @@ import { preventDefault, createNamespace, } from '../utils'; +import { runSyncRule } from './utils'; // Composition import { useParent } from '@vant/use'; @@ -133,26 +134,6 @@ export default createComponent({ resolve(returnVal); }); - const isEmptyValue = (value) => { - if (Array.isArray(value)) { - return !value.length; - } - if (value === 0) { - return false; - } - return !value; - }; - - const runSyncRule = (value, rule) => { - if (rule.required && isEmptyValue(value)) { - return false; - } - if (rule.pattern && !rule.pattern.test(value)) { - return false; - } - return true; - }; - const getRuleMessage = (value, rule) => { const { message } = rule; @@ -337,7 +318,6 @@ export default createComponent({ if (isDef(props[key])) { return props[key]; } - if (form && isDef(form.props[key])) { return form.props[key]; } @@ -423,7 +403,6 @@ export default createComponent({ ref: inputRef, name: props.name, rows: props.rows, - style: null, class: bem('control', inputAlign), value: props.modelValue, disabled: props.disabled, diff --git a/src/field/utils.ts b/src/field/utils.ts new file mode 100644 index 000000000..5796e1f90 --- /dev/null +++ b/src/field/utils.ts @@ -0,0 +1,30 @@ +export type FieldValidateTrigger = 'onSubmit' | 'onChange' | 'onBlur'; + +export type FieldRule = { + pattern?: RegExp; + trigger?: FieldValidateTrigger; + message?: string | ((value: unknown, rule: FieldRule) => string); + required?: boolean; + validator?: (value: unknown, rule: FieldRule) => boolean | Promise; + formatter?: (value: unknown, rule: FieldRule) => unknown; +}; + +function isEmptyValue(value: unknown) { + if (Array.isArray(value)) { + return !value.length; + } + if (value === 0) { + return false; + } + return !value; +} + +export function runSyncRule(value: unknown, rule: FieldRule) { + if (rule.required && isEmptyValue(value)) { + return false; + } + if (rule.pattern && !rule.pattern.test(String(value))) { + return false; + } + return true; +} diff --git a/src/form/README.zh-CN.md b/src/form/README.zh-CN.md index 5fe5485ab..78f299507 100644 --- a/src/form/README.zh-CN.md +++ b/src/form/README.zh-CN.md @@ -486,7 +486,7 @@ export default { | message `v2.5.3` | 错误提示文案 | _string \| (value, rule) => string_ | | validator `v2.5.3` | 通过函数进行校验 | _(value, rule) => boolean \| Promise_ | | pattern `v2.5.3` | 通过正则表达式进行校验 | _RegExp_ | -| trigger `v2.5.2` | 本项规则的触发时机,可选值为`onChange`、`onBlur` | _string_ | +| trigger `v2.5.2` | 本项规则的触发时机,可选值为 `onChange`、`onBlur` | _string_ | | formatter `v2.5.3` | 格式化函数,将表单项的值转换后进行校验 | _(value, rule) => any_ | ### validate-trigger  可选值