1.1.0 • Published 2 years ago

@mikkjal/validate.js v1.1.0

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

validate.js

A simple, Laravelian, way to validate JavaScript forms.

Table of Contents

  1. Installation
  2. Introduction
  3. Nested Objects
  4. Wildcard Character
  5. Messages
  6. Rules

Installation

npm i @mikkjal/validate.js

Introduction

const form = {
    email: 'test@example.com',
    password: 'password123',
    password_confirmation: '',
};

const rules = {
    email: 'required|email',
    password: 'required|min:8|confirmed',
};

const $v = validate(form, rules);
{
    "$valid": false,
    "$errors": {
        "password": ["The password confirmation does not match."]
    },
    "email": {
        "required": true,
        "email": true
    },
    "password": {
        "required": true,
        "min": true,
        "confirmed": false
    }
}

Nested objects

const form = {
    name: 'John Doe',
    job: {
        title: 'Full-stack Developer',
        email: 'jd@example.com',
    },
};

let rules = {
    name: 'required',
    job: {
        title: 'required|ends_with:Developer',
        email: 'required|email',
    },
    email: 'required|email',
};

// or

rules = {
    name: 'required',
    'job.title': 'required|ends_with:Developer',
    'job.email': 'required|email',
    email: 'required|email',
};

const $v = validate(form, rules);
{
    "$valid": false,
    "$errors": {
        "email": ["This field field is required"]
    },
    "name": {
        "required": true
    },
    "job": {
        "title": {
            "required": true,
            "ends_with": true
        },
        "email": {
            "required": true,
            "email": true
        }
    },
    "email": {
        "required": false,
        "email": false
    }
}

Wildcard Character

const form = {
    name: 'John Doe',
    personal_email: '',
    job: {
        title: 'Full-stack Developer',
        email: 'jd@example.com',
    },
};

const $v = validate(form, {
    '*email': 'email',
    'job.*': 'required',
});
{
    "$valid": true,
    "$errors": {},
    "personal_email": {
        "email": false
    },
    "job": {
        "email": {
            "email": true,
            "required": true
        },
        "title": {
            "required": true
        }
    }
}

Messages

const form = {
    email: 'test@example.com',
    password: 'Test123',
    password_confirmation: '',
    work: {
        email: '',
    },
};

const rules = {
    email: 'required',
    password: 'required|min:8|confirmed',
    '*email': 'email',
};

const messages = {
    'email.required': 'Email address is required',
    '*email.email': 'Not a valid email address',
    'password.min': 'The password needs to be at least 8 characters',
    'password.confirmed': 'The passwords do not match',
};

const $v = validate(form, rules, messages);
{
    "$valid": false,
    "$errors": {
        "password": ["The password needs to be at least 8 characters", "The passwords do not match"]
    },
    "email": {
        "required": true,
        "email": true
    },
    "password": {
        "required": true,
        "min": false,
        "confirmed": false
    },
    "work": {
        "email": {
            "email": false
        }
    }
}

Rules

after

const rules = {
    dob: 'after:2000-01-01',
};

ascii

const rules = {
    text: 'ascii',
};

before

const rules = {
    dob: 'before:2000-01-01',
};

between

const rules = {
    age: 'between:18,122',
};

boolean

const rules = {
    hasPermission: 'boolean',
};

confirmed

const rules = {
    password: 'confirmed',
};

date

const rules = {
    dob: 'date',
};

different

const rules = {
    password: 'different:username',
};

email

const rules = {
    email: 'email',
};

ends_with

const rules = {
    text: 'ends:world!',
};

hex

const rules = {
    color: 'hex',
};

in

const rules = {
    name: 'in:guest,user,admin',
};

ip

const rules = {
    ip: 'ip',
};

mac_address

const rules = {
    mac_address: 'mac_address',
};

max

const rules = {
    age: 'max:122',
    password: 'max:16',
};

mime_types

const rules = {
    file: 'mime_types:image/*',
};

min

const rules = {
    age: 'min:18',
    password: 'min:8',
};

not_in

const rules = {
    role: 'not_in:guest,user,admin',
};

not_regex

const rules = {
    not_a_number: 'not_regex:/^[0-9]$/',
};

numeric

const rules = {
    age: 'numeric',
};

password

Minimum eight characters, at least one letter, one number and one special character.

const rules = {
    password: 'password',
};

regex

const rules = {
    number: 'regex:/^[0-9]{6}$/',
};

required

const rules = {
    name: 'required',
};

required_if

const form = {
    role: 'admin',
    email: '',
    age: 18,
    hasCar: '',
};

const rules = {
    email: 'email|required_if:role,admin',
    hasCar: 'boolean|required_if:age,>=,18',
};

required_unless

const form = {
    role: '',
    email: 'test@example.com',
};

const rules = {
    role: 'required_unless:email,test@example.com',
};

required_with

const rules = {
    password: 'required_with:name,email',
};

required_with_all

const rules = {
    password: 'required_with_all:name,email',
};

required_without

const rules = {
    password: 'required_without:name,email',
};

required_without_all

const rules = {
    password: 'required_without_all:name,email',
};

same

const rules = {
    password: 'same:password_confirmation',
};

starts_with

const rules = {
    text: 'starts_with:Hello',
};

url

const rules = {
    url: 'url',
};

uuid

const rules = {
    uuid: 'uuid',
};
1.1.0

2 years ago

1.0.11

2 years ago

1.0.10

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago