Skip to content

Validation Rules

Note

We recommend using FormCreate's new validation engine. See Form Validation (New Version)

Form props

How to Use Validation Rules in Forms

Validation Rule Description

ParameterDescriptionTypeDefault
enumEnumeration typestring-
lenField lengthnumber-
maxMaximum lengthnumber-
messageValidation messagestring-
minMinimum lengthnumber-
patternRegular expression validationRegExp | string-
requiredWhether requiredbooleanfalse
transformTransform field value before validationfunction(value) => transformedValue:any-
typeBuilt-in validation type, Optionsstring'string'
validatorCustom validationfunction(rule, value, callback)-
whitespaceWhen required, whether spaces are considered errorsbooleanfalse

Note

  • When pattern is a string, don't include / at the start or end, or the regex will be invalid
  • type must match the component's value data type, or validation may fail
  • In custom validation, always call the callback function, whether validation passes or fails
  • Access component and form data via this.rule and this.api in custom validation

For more advanced usage, please refer to async-validator.

Common Validation Examples

1. Required Field Validation

js
const rule = {
    type: 'input',
    field: 'username',
    title: 'Username',
    validate: [
        { required: true, message: 'Username is required' }
    ]
}

2. Length Validation

Minimum Length Validation

js
const rule = {
    type: 'input',
    field: 'password',
    title: 'Password',
    validate: [
        { required: true, min: 6, message: 'Password length cannot be less than 6 characters' }
    ]
}

Maximum Length Validation

js
const rule = {
    type: 'input',
    field: 'description',
    title: 'Product Description',
    props: {
        type: 'textarea',
        maxLength: 200,
    },
    validate: [
        { required: true, max: 200, message: 'Description cannot exceed 200 characters' }
    ]
}

Fixed Length Validation

js
const rule = {
    type: 'input',
    field: 'idCard',
    title: 'ID Card Number',
    validate: [
        { required: true, len: 18, message: 'ID card number must be 18 digits' }
    ]
}

3. Regular Expression Validation

js
const rule = {
    type: 'input',
    field: 'phone',
    title: 'Phone Number',
    validate: [
        { required: true, message: 'Please enter phone number' },
        { pattern: '^1[3-9]\\d{9}$', message: 'Please enter a valid phone number' }
    ]
}

Email Validation

js
const rule = {
    type: 'input',
    field: 'email',
    title: 'Email',
    validate: [
        { required: true, message: 'Please enter email' },
        { type: 'email', message: 'Please enter a valid email address' }
    ]
}

4. Number Range Validation

js
const rule = {
    type: 'input-number',
    field: 'age',
    title: 'Age',
    props: {
        min: 0,
        max: 120,
    },
    validate: [
        { required: true, message: 'Please enter age' },
        { type: 'number', min: 18, max: 65, message: 'Age must be between 18-65 years' }
    ]
}

5. Custom Validation

js
const rule = {
    type: 'input',
    field: 'age',
    title: 'Age',
    validate: [
        {
            validator: (rule, value, callback) => {
                if (value < 18) {
                    callback('Age must be greater than or equal to 18 years');
                } else if (value > 65) {
                    callback('Age cannot exceed 65 years');
                } else {
                    callback();
                }
            }
        }
    ]
}

Custom Validation (Access Other Fields)

js
const rule = [
    {
        type: 'input',
        field: 'password',
        title: 'Password',
        validate: [
            { required: true, min: 6, message: 'Password length cannot be less than 6 characters' }
        ]
    },
    {
        type: 'input',
        field: 'confirmPassword',
        title: 'Confirm Password',
        validate: [
            { required: true, message: 'Please enter password again' },
            {
                validator: (rule, value, callback) => {
                    // Access other field values using this.api
                    const password = this.api.getValue('password');
                    if (value !== password) {
                        callback('The two passwords do not match');
                    } else {
                        callback();
                    }
                }
            }
        ]
    }
]

6. Enumeration Value Validation

js
const rule = {
    type: 'select',
    field: 'role',
    title: 'Role',
    validate: [
        { required: true, message: 'Please select role' },
        { enum: ['admin', 'user', 'guest'], message: 'Role must be admin, user, or guest' }
    ],
    options: [
        { label: 'Administrator', value: 'admin' },
        { label: 'User', value: 'user' },
        { label: 'Guest', value: 'guest' }
    ]
}

7. Array/Multiple Selection Validation

Minimum Selected Items Validation

js
const rule = {
    type: 'checkbox',
    field: 'tags',
    title: 'Product Tags',
    value: [],
    options: [
        { value: '1', label: 'Hot Sale' },
        { value: '2', label: 'New Product' },
        { value: '3', label: 'Recommended' },
        { value: '4', label: 'Limited Time' },
    ],
    validate: [
        { required: true, type: 'array', min: 2, message: 'Please select at least 2 tags' }
    ]
}

Maximum Selected Items Validation

js
const rule = {
    type: 'select',
    field: 'categories',
    title: 'Product Categories',
    value: [],
    props: {
        multiple: true,
    },
    options: [
        { value: '1', label: 'Electronics' },
        { value: '2', label: 'Clothing & Accessories' },
        { value: '3', label: 'Home Goods' },
    ],
    validate: [
        { required: true, type: 'array', max: 2, message: 'Can only select up to 2 categories' }
    ]
}

8. Date Validation

Date Required Validation

js
const rule = {
    type: 'date-picker',
    field: 'birthday',
    title: 'Birthday',
    validate: [
        { required: true, message: 'Please select birthday' }
    ]
}

Date Range Validation

js
const rule = {
    type: 'date-picker',
    field: 'dateRange',
    title: 'Activity Date',
    props: {
        mode: 'range',
    },
    validate: [
        { required: true, type: 'array', message: 'Please select activity date range' }
    ]
}

9. Combined Validation

js
const rule = {
    type: 'input',
    field: 'username',
    title: 'Username',
    validate: [
        { required: true, message: 'Username is required' },
        { min: 3, max: 20, message: 'Username length must be between 3-20 characters' },
        { pattern: '^[a-zA-Z0-9_]+$', message: 'Username can only contain letters, numbers, and underscores' }
    ]
}

10. Conditional Validation

js
const rule = [
    {
        type: 'switch',
        field: 'enableDiscount',
        title: 'Enable Discount',
        value: false,
    },
    {
        type: 'input-number',
        field: 'discount',
        title: 'Discount Rate',
        props: {
            min: 0,
            max: 1,
            step: 0.01,
            precision: 2,
        },
        validate: [
            {
                validator: (rule, value, callback) => {
                    const enableDiscount = this.api.getValue('enableDiscount');
                    if (enableDiscount && (!value || value <= 0)) {
                        callback('When discount is enabled, the discount rate must be greater than 0');
                    } else {
                        callback();
                    }
                }
            }
        ]
    }
]

FormCreate is an open-source project released under the MIT License. Free for personal and commercial use.