UNPKG

@axisdev/string-validation

Version:

Small string validation module for HTML forms or any kind of situation that requires a specific validation.

325 lines (233 loc) 12.8 kB
# String Validation Documentation This is a small module for string validation, can be used to validate inputs from a form or any other situation that requires a string validation. **IMPORTANT:** This package is in a early versions and have no enough testing for production projects. If you find a bug or issue please report it or send a email to: **braianrosas.dev@outlook.com**. ## Quick Start Start installing the package to your project: ``` npm i @axisdev/string-validation ``` Then import it: ```javascript const strValidation = require("@axisdev/string-validation"); ``` Now all you need to do is pass in the string with the validation options. Quick sample: ```javascript const string = "this is my awesome string"; const validate = strValidation(string, {alphabet: true, space: true}, "lower"); console.log(validate) // Prints { ok: true, message: "success" } ``` ## How To Use Validator function has a simple logic, you pass in a string, then define te validation conditionals in an object, define if you want it lower or upper case, choose a min and max length and add additional digits to the validation if required. If the validator find a non-specified character from the options or don't meet the length requeriments, then will return an object with `{ ok: false, message: "some message here" }`, else if the string meet the requirements, then it will return `{ ok: true, message: "success" }`. #### Validate username example: ```javascript // Validate the string "AwesomeUsername445" const username = "AwesomeUsername445"; const validation = strValidation(username, { alphabet: true, // Allow a-z digits numbers: true // Allow 0-9 digits }); // Return { ok: true, message: "success" } if (validation.ok) { // Send to the server/database } else { // Tells the user what he did wrong }; ``` #### Validate spanish paragraph ```javascript const text = `Todavía tengo casi todos mis dientes, casi todos mis cabellos y poquísimas canas, puedo hacer y deshacer el amor, trepar una escalera de dos en dos y correr cuarenta metros detrás del ómnibus, o sea que no debería sentirme viejo pero el grave problema es que antes no me fijaba en estos detalles.`; const validation = strValidation(text, { alphabet: true, // Allow a-z digits pausation: true, // Allow . and , digits space: true, // Allow spaces " ". latin: true // Allow accent marks (e.g: áëîòçñ...) }); // Return { ok: true, message: "success" } ``` #### Validate uppercase text ```javascript const upperText = "IFTHISISNOTUPPERCASETHENIDONTKNOWWHATITIS"; const validation = strValidation(upperText, { alphabet: true, // Allow a-z digits }, "upper" // Text must be in upper case ); // Return { ok: true, message: "success" } ``` #### Validate... this? ```javascript const lowerText = "áll 1 kn0w 1s thát th1s 1s l0wêr cásê ánd müst rêtürn trüê, ok?"; const options = { alphabet: true, numbers: true, latin: true, pausation: true, space: true }; const validation = strValidation(lowerText, options, "lower", "?"); // Return { ok: true, message: "success" } ``` ## Validator Parameters String validator function accepts a maximum of four (4) parameters in the next order and type: ```javascript strValidation(string, options, caseSensitive, lengthRange, additionals); ``` 1. `string` is the string to validate. 2. `options` is a object with the options you need to pass in to validate. 3. `caseSensitive` is a string to define if you want to be case sensitive or no. 4. `lengthRange` is a object with that define min length and max length allowed. 5. `additionals` is a string where you define additional characters that you want to appear in the string. ## Options The `options` parameter is a object with the options you want to include in your validation, all key values are boolean `true` or `false`. #### List of accepted options and what they do: * `alphabet`: Tells the validator to accept english alphabet characters (from **a** to **z**). * `numbers`: Tells the validator to accept numbers in string format (from **0** to **9**). * `latin`: Tells the validator to accept accent marks from any other latin-based language. Accepted values are **áäàâãåéëèêíïìîóöòôõøúüùûçýÿñ** for lower case and **ÁÄÀÂÃÅÉËÈÊÍÏÌÎÓÖÒÔÕØÚÜÙÛÇÝÑ** for upper case. * `special`: Tells the validator to accept base 10 non-alphabetical digits (**~!@#$%^&*_+=|{}[]():;'<>,.?/\"`**). * `symbol`: Tells the validator to accept any symbol of the nex symbols: **!#$%‰&'*+,.\/:;<=>?@[]^_`{|}~¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾⅛⅜⅝⅞¿Ð×Þßæð÷þ€≠≤≥√Ω↑↓←→№↔▲►▼◄■□▪▫●○◊()"**. * `paragraph`: Tells the validator to accept normal paragraph punctutions (**.,:;/ ()**), include blank spaces. * `pausation`: Tells the validator to accept dots and commas (**,.**). * `currency`: Tells the validator to accept these currency symbols: **£¥€¢$₩**. * `space`: Tells the validator to accept blank spaces. * `hyphen`: Tells the validator to accept hyphens. * `parentheses`: Tells the validator to accept parentheses. * `backslash`: Tells the validator to accept backslashes. ### Special options: **IMPORTANT: These options overrides any of the above including themselves so they should be used one at time** * `_money`: Tells the validator to accept **only** numbers in currency format, e.g: **$10000**, **$10000.99**, **$10,000.90**. Accepts any of the currency symbols listed in the `currency` option. ```javascript strValidation("€55,030,122.8092", {money: true}); // Return { ok: true, message: "success" } strValidation("€4444,333,22,1.0", {money: true}); // Return { ok: false, message: "bad format" } ``` * `_formalNumbers`: Same as `money` but excluding currency symbol. * `_email`: Tells the validator to accept **only** email format, e.g: **string_validator123@email.com.ok**. Rules are: 1. First character must be a **letter**, upper or lowercase. 2. The body can be any **letter, number** or **.-_**, but at least 1 digit length after rule 1. 3. Must have only one **@** after rule 2. 4. Must have at least one **letter** after 3. 5. Must have only one **dot** after rule 4. 6. Must have at least one **letter** after rule 5. 7. OPTIONAL: Must have only one **dot** and at least one **letter** after rule 6. A raw translation of the rules could be: **a_@x.y.z** ```javascript strValidation("normal_email123@wow.com", {_email: true}); // Return { ok: true, message: "success" } strValidation(".baddot@email.com", {_email: true}); // Return { ok: false, message: "bad format" } strValidation("a@badlenght.com.", {_email: true}); // Return { ok: false, message: "bad format" } strValidation("badtermination@email.", {_email: true}); // Return { ok: false, message: "bad format" } ``` * `_password`: Tells the validator to check if the string follow these rules: * Must have only alphabetical digits (**a-z** or **A-Z**), numerical digits (**0-9**), base 10 non-alphabetical digits (**~!@#$%^&*_+=`|{}[]():;'<>,.?/\"]**) or accent marks (**áäàâãåéëèêíïìîóöòôõøúüùûçýÿñÁÄÀÂÃÅÉËÈÊÍÏÌÎÓÖÒÔÕØÚÜÙÛÇÝÑ**). * Must have at least **2** min. digits length. * `_date`: Tells the validator to accept date string in **mm/dd/yyyy** format following these rules: * Month can't be **00** or greater than **12**. * Day cant't be **00** or greater than **31**. * Year must be **4 digits length**, this includes numbers from **0000** to **9999**. * `_dateFlex`: Same as `date` but in **dd/mm/yyyy**. * `_repeat`: Tells the validator to check if there is any alphabetical (a-z, A-Z) or numerical (0-9) digit repeated **3** or **more** times. * `_pattern`: Tells the validator to check if there is any of these common predictable patterns inside the string: **qwer**, **asd**, **sdfg**, **zxc**, **xyz**, **abc**, **1234**, **2345**, **3456**, **4567**, **5678**, **6789**. ## Case Sensitive `caseSensitive` parameter is a string that accepts only two (2) values: * `"upper"` * `"lower"` Any other string, `undefined` or `null` values will made no effect and the validator will choose the default option that is upper and lower together. * The `"upper"` string tells the validator to accept only a string in upper case format, e.g: ```javascript strValidation("UPPERCASE", {alphabet: true}, "upper"); // Return { ok: true, message: "success" } strValidation("UpperCase", {alphabet: true}, "upper"); // Return { ok: false, message: "bad digit" } strValidation("uppercase", {alphabet: true}, "upper"); // Return { ok: false, message: "bad digit" } ``` * The `"lower"` string tells the validator to accept only a string in lower case format e.g: ```javascript strValidation("lowercase", {alphabet: true}, "lower"); // Return { ok: true, message: "success" } strValidation("LowerCase", {alphabet: true}, "lower"); // Return { ok: false, message: "bad digit" } strValidation("LOWERCASE", {alphabet: true}, "lower"); // Return { ok: false, message: "bad digit" } ``` * If you do not specify any of the above rules, the default option is accept both lower and upper case strings, e.g: ```javascript strValidation("UPPERCASE", {alphabet: true}); // Return { ok: true, message: "success" } strValidation("lowercase", {alphabet: true}, null); // Return { ok: true, message: "success" } strValidation("UPPERlower", {alphabet: true}, "yarr!"); // Return { ok: true, message: "success" } ``` **NOTE:** This parameter only affect `alphabet` and `latin` options. ## Lenght Range `lengthRange` parameter is a object that accepts two (2) values, `min: Integer` and `max: Integer`. You can define both, or only one of them with your own specifications or pass in `null` to let defaults. Default values are: * `min: 0` * `max: 50000000` Application: ```javascript // Validate a password with 8 min digits and 24 max digits const myPassword = "secret99" // 7 digits length const myPasswordTwo = "secret123" // 8 digits length const myPasswordThree = "thisisaverylargepasswordwoah!" // 29 digits length strValidation(myPassword, {_password: true}, null, {min: 8, max: 24}); // Return { ok: false, message: "bad length" } strValidation(myPasswordTwo, {_password: true}, null, {min: 8, max: 24}); // Return { ok: true, message: "success" } strValidation(myPasswordThree, {_password: true}, null, {min: 8, max: 24}); // Return { ok: false, message: "bad length" } ``` ```javascript // Validate a string with max 30 digits length const myString = "abcdefghijklmnopqrstuvwxyz" // 26 const myStringTwo = "Roses are red, violets are blue." // 32 strValidation(myString, {alphabet: true}, null, {max: 30}); // Return { ok: true, message: "success" } strValidation(myStringTwo, {alphabet: true, paragraph: true}, null, {max: 30}); // Return { ok: false, message: "bad length" } ``` ## Additionals Parameter The `additionals` parameter is a optional string that tells the validator wich extra digits can accept in it's validation, e.g: ```javascript // This will return { ok: false, ...} because we don't specify "!" as accepted digit. strValidation("Validate this !!!", { alphabet: true, space: true }, null); // This will return { ok: true, ...} because we specify "!" as accepted digit. strValidation("Validate this !!!", { alphabet: true, space: true }, null, "!"); // Also this too strValidation("V@l1d@t3 th1s !?!", { alphabet: true, space: true }, null, "@13!?"); // And this strValidation("V@l1d@t3 th1s !?!", { alphabet: true, space: true, numbers: true, }, null, "@!?"); // Of course you can do this aswell strValidation("V@l1d@t3 th1s !?!", { alphabet: true, space: true, numbers: true, special: true, }); ``` #### IMPORTANT **Next digits must be placed with the following format if you want to avoid fake validations.** * **"]"** - Must be typed `"\\]"`. * **"\"** - Must be typed `"\\\\"`. * **"-"** - Must be typed `"\\-"`. ## Validator Return Format The validator function will always respond with an object with the next format: * `ok: Boolean` * `message: String` If the validation was successful, will always respond: * `ok: true` * `message: "success"` If the validation failed: * `ok: false` * `message:` * `"bad length"` if don't meet length requirements. * `"bad digit"` if there is a non-allowed digit. * `"bad format"` if the string format don't meet **special options** requirements.