All Projects → yairEO → Validator

yairEO / Validator

HTML form validation. Perfectly made for all scenerios, lightweight, semantic & easy to use

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Validator

React Controlled Form
Flexible, Modular & Controlled Forms for React and Redux
Stars: ✭ 121 (-42.11%)
Mutual labels:  form-validation
Neoform
✅ React form state management and validation
Stars: ✭ 162 (-22.49%)
Mutual labels:  form-validation
Composable Form
Build type-safe composable forms in Elm
Stars: ✭ 179 (-14.35%)
Mutual labels:  form-validation
Modal progress hud
A simple modal progress HUD (heads-up display, or progress indicator) for flutter
Stars: ✭ 137 (-34.45%)
Mutual labels:  form-validation
Formiz
🐜 React forms with ease! Composable, headless & with built-in multi steps
Stars: ✭ 159 (-23.92%)
Mutual labels:  form-validation
Formr
Create and Validate PHP Forms in Seconds.
Stars: ✭ 163 (-22.01%)
Mutual labels:  form-validation
Form For
ReactJS forms made easy
Stars: ✭ 118 (-43.54%)
Mutual labels:  form-validation
Material Singleinputform
A single EditText instead of a classical form. Library that implements flavienlaurent's singleinputform
Stars: ✭ 202 (-3.35%)
Mutual labels:  form-validation
Yaaf
Easing the form object pattern in Rails applications
Stars: ✭ 161 (-22.97%)
Mutual labels:  form-validation
Availity Reactstrap Validation
Easy to use React validation components compatible for reactstrap.
Stars: ✭ 176 (-15.79%)
Mutual labels:  form-validation
Vue Dynamic Forms
Easy way to dynamically create reactive forms in vue based on a varying business object model
Stars: ✭ 146 (-30.14%)
Mutual labels:  form-validation
Ionic Forms And Validations
📝 Ionic Tutorial - Learn to use Forms and Validations in Ionic Angular apps. Get a FREE Ionic 5 Forms Starter App and learn to handle simple and custom validations. Includes complete ionic forms tutorial!
Stars: ✭ 155 (-25.84%)
Mutual labels:  form-validation
Validator
A tiny library for easily validating TextInputLayouts in Android
Stars: ✭ 169 (-19.14%)
Mutual labels:  form-validation
Form Validation.js
The most customizable validation framework for JavaScript.
Stars: ✭ 127 (-39.23%)
Mutual labels:  form-validation
Redux Form
A Higher Order Component using react-redux to keep form state in a Redux store
Stars: ✭ 12,597 (+5927.27%)
Mutual labels:  form-validation
Vue Form Components
Clean & minimal vue form elements and form builder with validation
Stars: ✭ 120 (-42.58%)
Mutual labels:  form-validation
Sveltejs Forms
Declarative forms for Svelte
Stars: ✭ 163 (-22.01%)
Mutual labels:  form-validation
Documentation
📋 Official documentation/website
Stars: ✭ 202 (-3.35%)
Mutual labels:  form-validation
Elm Form
Dynamic forms handling in Elm
Stars: ✭ 189 (-9.57%)
Mutual labels:  form-validation
Validetta
A tiny jquery plugin for validate forms
Stars: ✭ 175 (-16.27%)
Mutual labels:  form-validation

Validator - Lightweight & Easy HTML form inputs checker

The Validator is cross-browser and will give you the power to use future-proof input types such as:
tel, email, number, date, time, checkbox and url.

👉 See Demo

npm i @yaireo/validator --save

// usage:

import FormValidator from '@yaireo/validator'

// or download the `validator.js` file and add load it inside your HTML file
<script src='validator.js'></script>

Why should you use this?

  • Cross browser validation
  • Deals with all sorts of edge cases
  • Utilize new HTML5 types for unsupported browsers
  • Flexible error messaging system
  • Light-weight (19kb + comments, unminified)

Validation types support

HTML5 offers a wide selection of input types. I saw no need to support them all, for example, a checkbox should not be validated as ‘required’ because why wouldn’t it be checked in the first place when the form is rendered?

For a full list of all the available Types, visit the working draft page. These input types can be validated by the the JS for – <input type='foo' name='bar' />. (Support is synthesized)

✔️ text
✔️ email
✔️ password - also comparing "re-type password" inputs
✔️ number
✔️ date
✔️ time
✔️ uRL
✔️ search
✔️ file
✔️ tel
✔️ checkbox
✔️ select
✔️ textarea
✔️ hidden – can also have the ‘required’ attribute

Basic semantics

<form action="" method="post" novalidate>
    <fieldset>
        <div class="field">
            <label>
                <span>Name</span>
                <input data-validate-length-range="6" data-validate-words="2" name="name" placeholder="ex. John f. Kennedy" required="required" type="text" />
            </label>
            <div class='tooltip help'>
                <span>?</span>
                <div class='content'>
                    <b></b>
                    <p>Name must be at least 2 words</p>
                </div>
            </div>
        </div>
        <div class="field">
            <label>
                <span>email</span>
                <input name="email" required="required" type="email" />
            </label>
        </div>
            ...

First, obviously, there is a Form element with the novalidate attribute to make sure to disable the native HTML5 validations (which currently suck). proceeding it there is a Fieldset element which is not a must, but acts as a “binding” box for a group of fields that are under the same “category”. For bigger forms there are many times field groups that are visually separated from each other for example. Now, we treat every form field element the user interacts with, whatsoever, as an “field”, and therefor these “fields” will be wraped with <div class='field'>. This isolation gives great powers. Next, inside an field, there will typically be an input or select or something of the sort, so they are put inside a <label> element, to get rid of the (annoying) for attribute, on the label (which also require us to give an ID to the form field element), and now when a user clicks on the label, the field will get focused. great. Going back to the label’s text itself, we wrap it with a <span> to have control over it’s style.

The whole approach here is to define each form field (input, select, whatever) as much as possible with HTML5 attributes and also with custom attributes.

HTML Attributes on form elements

Attribute Purpose
required
Defines that this field should be validated (with JS by my implementation and not via native HTML5 browser defaults)
placeholder
Writes some placeholder text which usually describes the fields with some example input (not supported in IE8 and below)
pattern
Defines a pattern which the field is evaluated with. Out-of-the-boxvailable values are:
numeric - Allow only numbers
alphanumeric - Allow only numbers or letters. No special language characters
phone - Allow only numbers, spaces or dashes.

Alternatively, you may write your own custom regex here as well
data-validate-words
Defines the minimum amount of words for this field
data-validate-length
Defines the length allowed for the field (after trim). Example value: 7,11 (field can only have 7 or 11 characters). you can add how many allowed lengths you wish
data-validate-length-range
Defines the minimum and/or maximum number of chars in the field (after trim). value can be 4,8 for example, or just 4 to set minimum chars only
data-validate-linked
Defines the field which the current field’s value (the attribute is set on) should be compared to. Value can be a selector or another input's name attribute's value
data-validate-minmax
For type number only. Defines the minimum and/or maximum value that can be in that field

pattern attribute

It is possible to write your own unique Regex patterns directly in the attribute or reference to it by custom name, for example:

<input type="text" required="required" pattern="myCustomRegex" />
var validator = new FormValidator({
    regex : {
        myCustomRegex: '/whatever/'
    }
}, );

Optional fields

There is also support for optional fields, which are not validated, unless they have a value. The support for this feature is done by adding a class optional to a form element. Note that this should not be done along side the “required” attribute.

Error messages

This is the object which holds all the texts used by the form validator:

{
    invalid         : 'inupt is not as expected',
    short           : 'input is too short',
    long            : 'input is too long',
    checked         : 'must be checked',
    empty           : 'please put something here',
    select          : 'Please select an option',
    number_min      : 'too low',
    number_max      : 'too high',
    url             : 'invalid URL',
    number          : 'not a number',
    email           : 'email address is invalid',
    email_repeat    : 'emails do not match',
    date            : 'invalid date',
    time            : 'invalid time',
    password_repeat : 'passwords do not match',
    no_match        : 'no match',
    complete        : 'input is not complete'
}

This object can be extended easily. The idea is to extend it with new keys which represent the name of the field you want the message to be linked to, and that custom message appear as the general error one. Default messages can be over-ride. Example: for a given type ‘date’ field, lets set a custom (general error) message like so:

// set custom text on initialization:
var validator = new FormValidator({
    texts : {
        date:'not a real date'
    }
});

// or post-initialization
var validator = new FormValidator();
validator.texts.date = 'not a real date';

Error messages (per field) can be disabled:

    validator = new FormValidator({
        alerts:false
    });

    // or by:
    var validator = new FormValidator();
    validator.settings.alerts = false;

Binding the validation to a form

There are two ways to validate form fields, one is on the submit event of the form itself, then all the fields are evaluated one by one. The other method is by binding the checkField function itself to each field, for events like Blur, Change or whatever event you wish (I prefer on Blur).

Usage example - validate on submit

A generic callback function to have the form validated on the Submit event. You can also include your own personal validations before the checkAll() call.

var validator = new FormValidator();
// select your "form" element from the DOM and attach an "onsubmit" event handler to it:
document.forms[0].onsubmit = function(e){
    var validatorResult = validator.checkAll(this); // "this" reffers to the currently submitetd form element

    return !!validatorResult.valid;
};

Usage example - validate on field blur/input/change events

Check every field (using event Capture)

var validator = new FormValidator();

document.forms[0].addEventListener('blur', function(e){
    validator.checkField(e.target)
}, true);

document.forms[0].addEventListener('input', function(e){
    validator.checkField(e.target);
}, true);

document.forms[0].addEventListener('change', function(e){
    validator.checkField(e.target)
}, true);

Utilize the internal events' binding system; pass in the settings the events property and assign it an array which states which events should be inputs be validated for. For a single events, a string may be paassed instead of an Array:

var validator = new FormValidator( document.forms[0], {
    "events" : ['blur', 'input', 'change'] // for a single one, just pass a string, ex: "blur"
});

In case the form is not yet ready, the events maybe be binded later, when the form is ready, using the internal events method for a validator instance:

// validate fields on these events:

var validator = new FormValidator(document.forms[0]); // the "<form>" element should be passed when the instance is created or passed to the "events" method below (as the 2nd parameter)

// wait for the form, or its' fields, to be ready (for whatever reason), and then bind the events as follows:
validator.events(['blur', 'input', 'change']);

Tooltips (for each field which did not validate)

The helper tooltips <div class='tooltip help'>, which work using pure CSS, are element which holds a small '?' icon and when hovered over with the mouse, reveals a text explaining what the field “field” is about or for example, what the allowed input format is.

Classes

validator.settings.classes object can be modified:

var validatorClasses = {
    field : 'field', // class for each input wrapper
    alert : 'alert', // call on the alert tooltip
    bad   : 'bad'    // classes for bad input
};

validator = new FormValidator(null, {classes:validatorClasses});

// or
validator = new FormValidator();
validator.settings.classes.bad = 'error';

Bonus – multifields

I have a cool feature I wrote which I call "multifields". These are fields which are often use as to input a credit card or a serial number, and are actually a bunch of input fields which are “connected” to each other, and treated as one. You can see it in the demo page, and it’s included in ‘multifield.js’ file.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].