UNPKG

validame

Version:

Javascript string validator

623 lines (395 loc) 12.2 kB
<div style="text-align:center"> <h1> validame </h1> <img src="https://i.gyazo.com/a979d99bac6f4e8d04ee8668634f1cf9.png" /> </div> [![install size](https://packagephobia.com/badge?p=validame@latest)](https://packagephobia.com/result?p=validame@latest) **validame** is a javascript **string validator** that returns the error message. - 🚀 Lightweight (12 kB packed and 53 kB unpacked). - ⚪️ Zero dependencies. - 🔧 Totally customizable. - 🧩 Modular. - 🌍 Multilanguage. <br> <!-- TOC ignore:true --> # Table of contents <a id="markdown-table-of-contents" name="table-of-contents"></a> <!-- TOC --> - [Import ⬇️](#import-) - [Basic examples 🔮](#basic-examples-) - [Usage 🧭](#usage-%F0%9F%A7%AD) - [Rules 📏](#rules-) - [allow rule 🏳️](#allow-rule-) - [allowOr rule 🏳️](#allowor-rule-) - [Symbols ✳️](#symbols-) - [Language 🌍](#language-) - [Editing symbols and rules 🧾](#editing-symbols-and-rules-%F0%9F%A7%BE) - [Creating your own rules ⚗️](#creating-your-own-rules-) - [Creating your own symbols ⚗️](#creating-your-own-symbols-) - [Advanced examples 🔮](#advanced-examples-) <!-- /TOC --> <br> # Import ⬇️ <a id="markdown-import-%E2%AC%87%EF%B8%8F" name="import-%E2%AC%87%EF%B8%8F"></a> ```js const {validame} = require("validame"); ``` <br> # Basic examples 🔮 <a id="markdown-basic-examples-%F0%9F%94%AE" name="basic-examples-%F0%9F%94%AE"></a> ```js let error = validame("Dog", { min: 4, }); // error = "It should have 4 minimum characters but it has 3." ``` ```js let error = validame("Dog", { min: 2, max: 4 }); // error = "" ``` ```js let error = validame("My name is Mike", { allow: "1" }); // error = "It's only allowed: numbers." ``` ```js let error = validame("My name is Mike", { allow: "a 1" }); // error = "It's only allowed: lowercase and numbers." ``` ```js let error = validame("My name is Mike", { allow: "aA" }); // error = "It's only allowed: letters." ``` ```js let error = validame("My name is Mike", { min: 4, max: 16, allow: "a A _" }); // error = "" ``` <br> # Usage 🧭 <a id="markdown-usage-%F0%9F%A7%AD" name="usage-%F0%9F%A7%AD"></a> **Returns** an empty string if the validation is correct, otherwise it returns an string explaining the error. ```js validame (stringToValidate, rules); ``` - **stringToValidate** `string`: The string you want to validate. - **rules** `object`: One or more rules, they are defined at `validameConfig.rules`. <br/> # Rules 📏 <a id="markdown-rules-%F0%9F%93%8F" name="rules-%F0%9F%93%8F"></a> ```js { // Minimum number of characters min: 1, // Maximum number of characters max: 10, // Exact number of characters minMax: 5, // 0: Empty string or null will return "" (OK). // 1: Empty string will return "" (OK) but null will return an error. // 2: Empty string OR null will return an error. req: 1, // (Explained below) Contains a list of symbols separated with a space. allow: "a A _ 1", allowOr: "dni cif", // Should have 3 uppercase, 2 lowercase and 1 numbers. password: [3, 2, 1], // Pass the validation and skips the next steps if the string matches any word. passWith: ["goodWordOne", "goodWordTwo"], } ``` The rules will be checked in the same order they are listed, example: ```js { min: 5, // first check (if it fails, it stops here) max: 10 // second check } ``` <br> # allow rule 🏳️ <a id="markdown-allow-rule-%F0%9F%8F%B3%EF%B8%8F" name="allow-rule-%F0%9F%8F%B3%EF%B8%8F"></a> - The allow rule reads a list of **symbols** *(explained below)*. - The symbol list must be **separated with spaces**. > Example: `a A _ !`. - The validations are done from **left to right**. - If **one symbol fails** it will return the error and stops the validation, otherwise the next symbol will be read. > - Example: `"a 1"` (lowercase and numbers) will fail with "Mike123" but pass with "mike123". > - Example: `"costlessPrefixEs phoneEs"` will fail with "807456789" because "807" is a paid prefix. - If the symbol list is filled with regex symbols, they all will be read because they can't fail. They make an "allowlist" and will only fail if there is a character outside that allowlist. <br/> # allowOr rule 🏳️ <a id="markdown-allowor-rule-%F0%9F%8F%B3%EF%B8%8F" name="allowor-rule-%F0%9F%8F%B3%EF%B8%8F"></a> - Same mechanics than `allow` rule, but this one needs **all symbols failing** to return an error. - The returned error it's from the first failed symbol. > ❌ It only works with **function symbols**, not regex. <br/> # Symbols ✳️ <a id="markdown-symbols-%E2%9C%B3%EF%B8%8F" name="symbols-%E2%9C%B3%EF%B8%8F"></a> Each symbol is unique and has a **regex or function** associated. - **Regex symbols**: > Allow rule with regex symbols describes an allowlist. > Examples: > - `allow: "a"` with `"mike123"` will fail because numbers are not in the allowlist. > - `allow: "a 1"` with `"mike123"` will pass because there are no characters outside the allowlist. > - `allow: "a 1"` with `"mike"` will pass because there are no characters outside the allowlist. > - `allow: "1 a"` with `"mike"` will pass because there are no characters outside the allowlist. - `a`: `a-z` - `A`: `A-Z` - `aA`: `a-zA-Z` - `1`: `0-9 (only integers)` - `2`: `0-9 (integers or decimals)` - `_`: `spaces` - `!`: `ºª\!|"@·#€\$%&¬/()=?'¿¡^``\[+]´,{}-_<>~` - `ñ`: `áéíóúñ` - `Ñ`: `ÑÁÉÍÓÚ` - `ñÑ`: `áéíóúñÑÁÉÍÓÚ` <br/> - **Function symbols**: - `phoneEs`: Spanish telephone number. - `mobileEs`: Spanish mobile number. - `dni`: Valid DNI (spain). - `cif`: Valid CIF (spain). - `ibanEs`: Spanish IBAN. - `email`: Email address. - `postalCodeEs`: Spanish postal code. <br/> > ✅ If the symbols are **regex**, the error string is built automatically. > Example, with `"a 1"` the error string will be: > `It's only allowed: lowercase and numbers` <br> # Language 🌍 <a id="markdown-language-%F0%9F%8C%8D" name="language-%F0%9F%8C%8D"></a> ```js const {validameConfig} = require("validame"); validameConfig.language = "en"; ``` It specifies the language of the errors given, default `"es"`. At the moment the possible options are: - `es` - `en` But you can add your own language and translations. <br> # Editing symbols and rules 🧾 <a id="markdown-editing-symbols-and-rules-%F0%9F%A7%BE" name="editing-symbols-and-rules-%F0%9F%A7%BE"></a> ```js const {validameConfig} = require("validame"); valiadmeConfig.symbols = {...}; valiadmeConfig.rules = {...}; ``` ## ➡️ `symbols` property They are used inside `allow` rule. Example: `allow: "aA 1"` (letters and numbers). - **regex** `regex | function`: Used when the symbol is called. - **messages** `object`: Messages displayed and his translations. Examples: ```js "a": { regex: /[a-z]/g, messages: { name: { es: "minúsculas", en: "lowercase", xx: "here could be placed your own translation", } }, } ``` ```js "phoneEs": { regex: require("./validations/symbols/phone").phoneEs, messages: { invalid: { es: "No es un teléfono español válido", en: "It isn't a valid spanish phone", xx: "here could be placed your own translation", }, digits: { es: "Debe tener 9 dígitos", en: "It must have 9 digits", xx: "here could be placed your own translation", } }, } ``` <br/> ## ➡️ `rules` property - **fnc** `function`: Used when the rule is called. - The next properties are an `object` with the name of the error message for the rule: Examples: ```js allow: { fnc: require("./validations/rules/allow"), messages: { itsOnlyAllowed: { es: "Sólo se permite: ", en: "It's only allowed: ", }, and: { es: " y ", en: " and ", } }, } ``` ```js min: { fnc: require("./validations/rules/min"), messages: { error: { es: "Debería tener _%1 caracteres como mínimo pero tiene _%2.", en: "It should have _%1 minimum characters but it has _%2.", } }, } ``` > 🔴 The `_%1` `_%2` (and so on) are replacers. <br> # Creating your own rules ⚗️ <a id="markdown-creating-your-own-rules-%E2%9A%97%EF%B8%8F" name="creating-your-own-rules-%E2%9A%97%EF%B8%8F"></a> ```js // Import const {validame, validameConfig, validameUtils} = require("validame"); const multiReplace = validameUtils.multiReplace; // Create the function const myCustomRule = (stringToValidate, value, config) => { let upper = new RegExp(`[A-Z]{${value[0]}}`).test(stringToValidate); let lower = new RegExp(`[a-z]{${value[1]}}`).test(stringToValidate); if (!upper || !lower) { // Create message using replacers let errorMessage = multiReplace(config.rules.upperAndLower.messages.must[config.language], { "_%1": value[0], "_%2": value[1], }); return errorMessage; // Without multilanguage return `It must have at least ${value[0]} uppercase and ${value[1]} lowercase characters`; }; // All OK return ""; }; // Create your custom rule validameConfig.rules.upperAndLower = { fnc: myCustomRule, messages: { must: { es: "Tiene que tener al menos _%1 mayúsculas y _%2 minúsculas.", en: "It must have at least _%1 uppercase and _%2 lowercase characters", } }, }; // And you can use it now: let error1 = validame("mike", { upperAndLower: [1, 2], }); // error1 = "It must have at least 1 uppercase and 2 lowercase characters" let error2 = validame("Mike", { upperAndLower: [1, 2], }); // error2 = "" ``` <br> # Creating your own symbols ⚗️ <a id="markdown-creating-your-own-symbols-%E2%9A%97%EF%B8%8F" name="creating-your-own-symbols-%E2%9A%97%EF%B8%8F"></a> ```js // Import const {validame, validameConfig} = require("validame"); // Create the function const myCustomSymbol = (stringToValidate, config) => { // Get the over18 symbol config const symbolMessages = config.symbols.over18.messages; // Check if it's a number let age = parseInt(stringToValidate); if (isNaN(age)) return symbolMessages.number[config.language]; // Check if it's over 18 if (age < 18) return symbolMessages.over[config.language]; // All OK return ""; }; // Create your custom symbol validameConfig.symbols.over18 = { regex: myCustomSymbol, messages: { number: { es: "Tiene que ser un número", en: "It must be a number", }, over: { es: "Tiene que ser mayor que 18", en: "It must be over 18", } }, }; let error1 = validame("35", { allow: "over18", }); // error1 = "" let error2 = validame("17", { allow: "over18", }); // error2 = "It must be over 18" ``` <br/> # Advanced examples 🔮 <a id="markdown-advanced-examples-%F0%9F%94%AE" name="advanced-examples-%F0%9F%94%AE"></a> ```js let error = validame("Name SurnameOne SurnameTwo", { min: 4, max: 64, allow: "a A _" }); // error = "" ``` ```js let error = validame("600123456", { req: 1, allow: "phoneEs" }); // error = "" ``` ```js let error = validame("", { req: 1, min: 4, max: 64, allow: "a A" }); // error = "It can't be empty." ``` ```js let error = validame("", { req: 2, min: 4, max: 64, allow: "a A" }); // error = "It can't be empty." ``` ```js let error = validame(null, { req: 1, min: 4, max: 64, allow: "a A" }); // error = "It should have 4 minimum characters but it has 0." ``` ```js let error = validame(null, { req: 2, min: 4, max: 64, allow: "a A" }); // error = "It can't be empty." ``` --- ### <a name='table-of-contents'></a>[⏫](#table-of-contents)