CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-vuelidate--validators

Comprehensive validation library for Vue.js applications providing common validators with built-in error messages and customization options

87

1.14x
Overview
Eval results
Files

conditional-validators.mddocs/

Conditional and Comparison Validators

Validators for conditional validation logic and value comparison operations.

Capabilities

Conditional Required Validators

Validators that make fields required based on specific conditions or other field values.

Required If Validator

Makes a field required when a specified condition is true.

/**
 * Makes field required when condition evaluates to true
 * @param prop - Condition (boolean, Vue ref, string property path, or function)
 * @returns ValidationRuleWithoutParams that requires field when condition is true
 */
function requiredIf(prop: boolean | Ref<boolean> | string | (() => boolean | Promise<boolean>)): ValidationRuleWithoutParams;

Usage Examples:

import { requiredIf } from "@vuelidate/validators";
import { ref, computed } from "vue";

// Static boolean condition
const isAdult = ref(false);
const adultValidation = requiredIf(isAdult.value);

// Vue ref condition
const showOptionalField = ref(false);
const conditionalRequired = requiredIf(showOptionalField);

// Function condition
const requireWhenEmailProvided = requiredIf(() => formData.email !== "");

// Async function condition
const requireWhenServerCheck = requiredIf(async () => {
  const response = await checkServerCondition();
  return response.requiresField;
});

// Property path condition (checks sibling property)
const requireWhenTypeIsPersonal = requiredIf("personalAccount");

// In validation rules
const validationRules = {
  accountType: { required },
  personalDetails: {
    requiredIf: requiredIf(computed(() => formData.accountType === "personal"))
  },
  businessName: {
    requiredIf: requiredIf(computed(() => formData.accountType === "business"))
  }
};

Required Unless Validator

Makes a field required unless a specified condition is true.

/**
 * Makes field required unless condition evaluates to true
 * @param prop - Condition (boolean, Vue ref, string property path, or function)
 * @returns ValidationRuleWithoutParams that requires field unless condition is true
 */
function requiredUnless(prop: boolean | Ref<boolean> | string | (() => boolean | Promise<boolean>)): ValidationRuleWithoutParams;

Usage Examples:

import { requiredUnless } from "@vuelidate/validators";
import { ref, computed } from "vue";

// Require field unless user is guest
const isGuest = ref(false);
const requireUnlessGuest = requiredUnless(isGuest);

// Require unless another field has value
const requireUnlessEmailProvided = requiredUnless(() => formData.email !== "");

// Property path condition
const requireUnlessSkipSelected = requiredUnless("skipThis");

// In validation rules
const validationRules = {
  userType: { required },
  fullName: {
    requiredUnless: requiredUnless(computed(() => formData.userType === "anonymous"))
  },
  phoneNumber: {
    requiredUnless: requiredUnless(computed(() => formData.email !== ""))
  }
};

Comparison Validators

Validators for comparing values between fields or against reference values.

Same As Validator

Validates that a field value matches another field or reference value.

/**
 * Validates that field value matches the reference value
 * @param equalTo - Reference value to compare against (any type or Vue ref)
 * @param otherName - Optional name for the reference field (for error messages)
 * @returns ValidationRuleWithParams with equalTo and otherName parameters
 */
function sameAs<E = unknown>(equalTo: E | Ref<E>, otherName?: string): ValidationRuleWithParams<{ equalTo: E, otherName: string }>;

Usage Examples:

import { sameAs, required } from "@vuelidate/validators";
import { ref, computed } from "vue";

// Password confirmation
const formData = ref({
  password: "",
  confirmPassword: ""
});

const validationRules = {
  password: { required },
  confirmPassword: {
    required,
    sameAsPassword: sameAs(computed(() => formData.value.password), "password")
  }
};

// Email confirmation
const emailConfirmation = sameAs(computed(() => formData.value.email), "email");

// Static value comparison
const mustBeTrue = sameAs(true);
const mustMatchCode = sameAs("EXPECTED_CODE");

// Complex object comparison
const userData = ref({ id: 123, name: "John" });
const mustMatchUser = sameAs(userData.value);

// In validation with custom field name
const validationRules2 = {
  primaryEmail: { required, email },
  confirmEmail: {
    required,
    email,
    sameAsPrimary: sameAs(computed(() => formData.value.primaryEmail), "primary email")
  }
};

Advanced Usage Patterns

Multi-Step Form Validation

Conditional validators are particularly useful in multi-step forms where validation rules change based on previous selections:

import { required, requiredIf, sameAs, email } from "@vuelidate/validators";
import { computed } from "vue";

const formData = ref({
  accountType: "",
  personalInfo: {
    firstName: "",
    lastName: "",
    email: "",
    confirmEmail: ""
  },
  businessInfo: {
    companyName: "",
    taxId: ""
  }
});

const validationRules = {
  accountType: { required },
  personalInfo: {
    firstName: {
      requiredIf: requiredIf(computed(() => formData.value.accountType === "personal"))
    },
    lastName: {
      requiredIf: requiredIf(computed(() => formData.value.accountType === "personal"))
    },
    email: {
      requiredIf: requiredIf(computed(() => formData.value.accountType === "personal")),
      email
    },
    confirmEmail: {
      requiredIf: requiredIf(computed(() => formData.value.personalInfo.email !== "")),
      email,
      sameAsEmail: sameAs(computed(() => formData.value.personalInfo.email), "email")
    }
  },
  businessInfo: {
    companyName: {
      requiredIf: requiredIf(computed(() => formData.value.accountType === "business"))
    },
    taxId: {
      requiredIf: requiredIf(computed(() => formData.value.accountType === "business"))
    }
  }
};

Terms and Conditions Validation

import { required, requiredIf, sameAs } from "@vuelidate/validators";

const agreementRules = {
  agreeToTerms: { sameAs: sameAs(true) },
  agreeToNewsletter: {}, // Optional
  parentalConsent: {
    requiredIf: requiredIf(computed(() => userAge.value < 18)),
    sameAs: sameAs(true)
  }
};

Dynamic Field Dependencies

import { requiredIf, requiredUnless } from "@vuelidate/validators";

const dynamicRules = {
  primaryContact: { required },
  secondaryContact: {
    requiredUnless: requiredUnless(computed(() => formData.value.primaryContact !== ""))
  },
  emergencyContact: {
    requiredIf: requiredIf(computed(() => formData.value.isMinor || formData.value.hasSpecialNeeds))
  }
};

Install with Tessl CLI

npx tessl i tessl/npm-vuelidate--validators

docs

conditional-validators.md

core-validators.md

format-validators.md

helpers-utilities.md

index.md

internationalization.md

logical-operators.md

tile.json