Skip to content

useValidators

A composable that provides a collection of commonly used validation functions for form input validation. These validators are internationalized and return appropriate error messages when validation fails.

Usage

ts
import { useValidators } from '#imports'

// Access all validators
const {
  validatorRequired,
  validatorEmail,
  validatorMin,
  validatorMax,
  // etc.
} = useValidators()

// Use in form rules
const rules = {
  name: [validatorRequired, validatorMax(50)],
  email: [validatorRequired, validatorEmail],
  password: [validatorRequired, validatorMin(8)]
}

Available Validators

ValidatorParametersDescription
validatorRequiredvalue: anyValidates that a value is truthy
validatorRequiredArrayvalue: anyValidates that a value is an array
validatorNotNullvalue: anyValidates that a value is not null or undefined
validatorMinlength: numberCreates a validator that checks minimum string length
validatorMaxlength: numberCreates a validator that checks maximum string length
validatorMaxFileSizesize: numberCreates a validator that checks maximum file size in bytes
validatorRequiredNumbervalue: anyValidates that a value is a valid number
validatorEmailvalue: anyValidates that a value is a valid email format
validatorPhonevalue: anyValidates that a value contains only digits
validatorEqualsmatch: any, message: stringCreates a validator that checks equality with another value

Return Values

Each validator either:

  • Returns true if validation passes
  • Returns a localized error message string if validation fails

Internationalization

All error messages are automatically translated using the useI18n composable, allowing for localized validation messages.

Examples

Basic Form Validation

vue
<script setup>
import { ref } from 'vue'
import { useValidators } from '#imports'

const { 
  validatorRequired, 
  validatorEmail, 
  validatorMin,
  validatorEquals 
} = useValidators()

const form = ref(null)
const name = ref('')
const email = ref('')
const password = ref('')
const confirmPassword = ref('')

// Create a dynamic validator that compares with password
const passwordMatchValidator = computed(() => {
  return validatorEquals(password.value, 'Passwords do not match')
})

async function submit() {
  const { valid } = await form.value.validate()
  if (valid) {
    // Handle form submission
  }
}
</script>

<template>
  <v-form ref="form">
    <v-text-field
      v-model="name"
      label="Name"
      :rules="[validatorRequired]"
    ></v-text-field>
    
    <v-text-field
      v-model="email"
      label="Email"
      :rules="[validatorRequired, validatorEmail]"
    ></v-text-field>
    
    <v-text-field
      v-model="password"
      label="Password"
      type="password"
      :rules="[validatorRequired, validatorMin(8)]"
    ></v-text-field>
    
    <v-text-field
      v-model="confirmPassword"
      label="Confirm Password"
      type="password"
      :rules="[validatorRequired, passwordMatchValidator]"
    ></v-text-field>
    
    <v-btn @click="submit">Submit</v-btn>
  </v-form>
</template>

Source Code