npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

zee-valinator

v0.15.1

Published

JavaScript class for validating input elements

Downloads

7

Readme

ZeeValinator

JavaScript class for validating input elements.

I need your clothes, your boots, your motorcycle and your HTML forms 😎

Installation

Use Yarn/NPM to install ZeeValinator.

// Using Yarn
yarn add zee-valinator

// Or with NPM
npm install zee-valinator --save

Usage

Include jQuery before including the ZeeValinator file

<script src="path/to/jquery.min.js"></script>
<script src="node_modules/zee-valinator/dist/zee-valinator.min.js"></script>

Create a new ZeeValinator object

var zeeValinator = new ZeeValinator();

Create some validation rules as objects, with 'element' and 'rules' properties

The 'element' property can be either a string (the 'name' attribute of the element you want to validate), or a jQuery object.

var validationRules = [];

validationRules.push({
    element: $('select[name="connor_family_member"]'),
    rules: {
        // This is the 'required' rule, and the message in case the input value is empty
        // As you can see, HTML is supported
        required: 'Please select either <em>John</em> or <em>Sarah</em>'
    }
});

Multiple rules for the same element are possible. Some rules have an extra option, like the 'matchWith' rule below. In this example, the 'password' element needs to have the same value as the 'password_check' element.

validationRules.push({
    element: 'password',
    rules: {
        required: 'Please fill in a password, like h4st4-l4-v1st4 or something',
        matchWith: 'password_check|Passwords do not match!'
    }
});

To make a rule conditional, or more advanced in any way, use a function. In the example below, clothes (including boots) are only needed when naked. If the rule applies, return the error message string, otherwise return nothing, or just anything that isn't a string.

Please note: ZeeValinator checks for a returned string, so '' will still be treated as an error message, and it could then add the error class to the input element, and add an error message element.

validationRules.push({
    element: 'clothes',
    rules: {
        required: function() {
            var hasClothes = $('input[name="has_clothes"]').prop('checked');

            if( ! hasClothes)
                return 'Please fill in which clothes you need';
        }
    }
});

It is also possible to do the same validation on multiple elements, using an element array. In this case, a valid color needs to be given in 3 input elements. Strings and jQuery objects can be mixed in the array.

validationRules.push({
    element: ['clothes', $('input[name="boots"]'), 'motorcycle'],
    rules: {
        hexColor: 'Please set a valid color'
    }
});

Then run the validation rules!

The validate() method returns an array of objects, containing elements that have an error, and their error message.

ZeeValinator stops after the first error, per element. So if there are 3 rules for an element, and the second one fails, the third rule will not be checked, and it will move on to the next element, if there is one of course.

ZeeValinator sets the CSS class 'zee-valinator-error' on input elements that contain an error, and it creates a span element with the 'zee-valinator-error-message' CSS class for the error messages, right after the corresponding input element.

// Pass validation rules to the validate() method
var result = zeeValinator.validate(validationRules);

/*
result:
[
    {
        $element: The element containing an error (jQuery object)
        message: The error message for the element
    }
]
*/

// Of course you can also provide an array directly
zeeValinator.validate([
    { /* Validation rule */ },
    { /* Validation rule */ }
]);

// Using only 1 rule object is also possible
zeeValinator.validate({ /* Validation rule */ });

Available validations

This is the list of all validations that ZeeValinator has out of the box, please keep an eye on this list, because I'll be adding more (or maybe you will? see the 'Contributing' section):

  • alphanumeric: Needs to contain only letters and numbers (case-insensitive).
  • email: Needs to be a valid email address.
  • hexColor: Needs to be a valid hexadecimal color (#xxx or #xxxxxx).
  • length: Needs to be exactly # characters long.
    • length: '8|Value needs to be exactly 8 characters long'
  • match: Needs to match an exact value.
    • match: 'test|Please type the word "test"'
  • matchWith: Needs to match with the value of another input element.
    • matchWith: 'password_check|Please type the same password in both fields'
  • maxLength: Needs to be at most # characters long.
    • length: '8|Value needs to be at most 8 characters long'
  • maxNumber: Needs to be a number, and lower than or equal to #.
    • '8|Value cannot be higher than 8'
  • minLength: Needs to be at least # characters long.
    • length: '8|Value needs to be at least 8 characters long'
  • minNumber: Needs to be a number, and higher than or equal to #.
    • '8|Value cannot be lower than 8'
  • personName: Needs to be a valid person name.
  • numeric: Needs to be a number.
  • phone: Needs to be a valid phone number.
  • required: Needs to be filled in, selected or checked.

Configuring

To change the CSS classes, and the HTML tag name for the error message element, use these methods:

zeeValinator.setInputErrorClass('new-input-error-class');
zeeValinator.setErrorMessageTag('div');
zeeValinator.setErrorMessageClass('new-error-message-class');

ZeeValinator comes shipped with many validation options, but you can add your own, or overwrite the existing ones. The newCheck() method needs the name of the validation, and the function that does the validation, alternatively, it accepts an object with name:function pairs. The function takes a value and option and needs to return a boolean, true for passed, false for failed. The option parameter is optional, and only used for validations like 'minLength' or 'matchWith'.

// Create new validation logic
zeeValinator.newCheck('isJohnConnor', function(value, option) {
    // See if the person filling in your form is John Connor
    return (value == 'John Connor');
});

// Then use it as usual
zeeValinator.validate({
    element: $('input[name="full_name"]'),
    rules: {
        isJohnConnor: 'Only Johnny Boy is allowed to fill in this form'
    }
});

// Overwrite existing logic
zeeValinator.newCheck('required', function(value, option) {
    // Apart from not being empty (required), the value has to be 'motorcycle'
    return (value == 'motorcycle');
});

The above can also be done with 1 call, using an object as the only argument

zeeValinator.newCheck({
    isJohnConnor: function(value, option) {
        // See if the person filling in your form is John Connor
        return (value == 'John Connor');
    },
    required: function(value, option) {
        // Apart from not being empty (required), the value has to be 'motorcycle'
        return (value == 'motorcycle');
    }
});

The error handling can also be overwritten, with the setCustomErrorHandlers() method. The first argument is the 'set error' callback, the second argument is the 'remove error' callback. Either one of these can be null, if you wish to keep te default for it.

zeeValinator.setCustomErrorHandlers(
    // The 'set error' callback gets the ZeeValinator object,
    // the element that contains an error (jQuery object) and the error message
    function(zee, $element, message) {
        // ...
    },
    // The 'remove error' callback gets the same, minus the error message
    function(zee, $element) {
        // ...
    }
);

To make writing custom error handlers a little easier, the properties below are accessible inside the callbacks. You could do something completely different of course, but here they are for reference:

// Input elements with errors get this CSS class (default: 'zee-valinator-error')
zee.inputErrorClass

// The HTML tag of the error element (default: 'span')
zee.errorMessageTag

// The CSS class of the error element (default: 'zee-valinator-error-message')
zee.errorMessageClass

// The error message tag and CSS class concatenated (default: 'span.zee-valinator-error-message')
zee.errorMessageSelector

// The error message jQuery element, using the above
// When using this, please use zee.$errorMessageElement.clone(),
// Otherwise the same jQuery object will be reused
zee.$errorMessageElement

Styling

Only 2 CSS selectors are needed in your styling.
Of course this differs if you've set some other tag or CSS class (see the 'Configuring' section).

/* Input elements that contain errors */
.zee-valinator-error {
    border-color: #F00;
}

/* Elements containing error messages */
span.zee-valinator-error-message {
    color: #F00;
    font-size: 90%;
}

Contributing

The validation logic is extendable and overwritable (see the 'Configuring' section), so if you have some great validation logic, please don't hesitate to do a pull request.

Dependencies

The only dependency is jQuery.

License

This project uses the Unlicense.