1.7.1 • Published 11 months ago

@nerdware/ts-string-helpers v1.7.1

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

TypeScript utils to sanitize and validate strings in any environment 🎉ESM ✅ CommonJS ✅ NodeJS ✅ browsers ✅

npm package Test Workflow CodeCov pre-commit semantic-release License: MIT

🚀 Getting Started

This package provides a lightweight set of TypeScript utils to sanitize and validate strings in any environment.

The sanitize functions use reverse-regex patterns to strip unwanted characters from strings — even pesky zero-width control characters — leaving only the characters you want. This is useful for sanitizing user input and other untrusted data.

For each sanitize function, there's a corresponding validate function to ensure strings match a specific format.

📦 Installation

Install the package using your package manager of choice:

npm:

npm install @nerdware/ts-string-helpers

yarn:

yarn add @nerdware/ts-string-helpers

🛠️ Usage

Here's a simple example of how to use the sanitizeEmail and isValidEmail functions to sanitize and validate an email address before using it in a NodeJS Express route:

import { sanitizeEmail, isValidEmail } from "@nerdware/ts-string-helpers";
import express from "express";
import { UserModel } from "./models/my-user-model";

// or const { sanitizeEmail } = require("@nerdware/ts-string-helpers");

const app = express();

app.use(express.json());

app.post("/register", (req, res, next) => {
  // Sanitize the unknown `email` input before using it!
  const userEmail = sanitizeEmail(req.body.email);

  // Validate the sanitized email
  if (!isValidEmail(userEmail)) {
    return res.status(400).send("Invalid email address");
  }

  // Now you can safely use the sanitized value throughout the rest of your stack!🎉
  const newUser = UserModel.create({ email: userEmail });

  res.status(201).json(newUser);
});

⚙️ API

!TIP

  • In the tables below, click on a function to view the exact regex pattern it uses.
  • Additional information is also available in each function's JSDoc comments.
  • Functions with the 🌎 globe emoji in their description use limited Unicode character classes rather than ASCII-character ranges for greater i18n support (for more info, see Unicode Support).
  • All functions with the Alpha infix (e.g., sanitizeAlphabetic) only permit ASCII characters and are case-insensitive.

Sanitizers

FunctionDescription
sanitizeAlphabeticRemoves non-alphabetic characters
sanitizeAlphabeticWithSpacesRemoves non-alphabetic/space characters
sanitizeAlphanumericRemoves non-alphanumeric characters
sanitizeAlphanumericWithSpacesRemoves non-alphanumeric/space characters
sanitizeBase64Removes invalid base64 characters
sanitizeBase64URLRemoves invalid base64URL characters
sanitizeEmailRemoves invalid email characters (see RFC 5322)
sanitizeHandleRemoves invalid social-handle characters
sanitizeHexRemoves non-hexadecimal characters
sanitizeIDRemoves non-alphanumeric characters which are not _, -, or #
sanitizeJsonStringRemoves characters which are not valid in stringified JSON
sanitizeJWTRemoves characters which are not valid in a JSON Web Token
sanitizeNameRemoves characters which are generally not valid in a name (🌎i18n-friendly)
sanitizeNumericRemoves non-numeric characters
sanitizePasswordRemoves non-alphanumeric characters which are not !, @, #, $, %, ^, &, or *
sanitizePhoneAlias of sanitizeNumeric
sanitizeTextRemoves characters which are generally not used in text/comments (🌎i18n-friendly)
sanitizeURLRemoves invalid URL characters

Validators

FunctionDescription
isValidAlphabeticReturns true if value only contains alphabetic characters
isValidAlphabeticWithSpacesReturns true if value only contains alphabetic characters and/or spaces
isValidAlphanumericReturns true if value only contains alphanumeric characters
isValidAlphanumericWithSpacesReturns true if value only contains alphanumeric characters and/or spaces
isValidBase64Returns true if value is a valid base64 string
isValidBase64URLReturns true if value is a valid base64URL string
isValidCurrencyReturns true if value is a valid USD currency-formatted string
isValidEmailReturns true if value is a valid email address (see RFC 5322)
isValidHandleReturns true if value is a valid social account handle (e.g., @foo_user)
isValidHexReturns true if value only contains hexadecimal characters
isValidIDReturns true if value only contains alphanumeric characters, _, -, or #
isValidJsonStringReturns true is value only contains valid JSON characters
isValidJWTReturns true if value only contains valid JSON Web Token characters
isValidNameReturns true if value only contains name-related characters (🌎i18n-friendly)
isValidNumericReturns true if value only contains numeric characters
isValidPasswordReturns true if value is a valid password (see jsdoc for details)
isValidPhoneReturns true if value is a valid string of US phone number DIGITS
isValidTextReturns true if value does not contain potentially harmful characters (🌎i18n-friendly)
isValidURLReturns true if value is a valid absolute or relative URL (protocol agnostic)
isValidHttpURLReturns true if value is a valid absolute HTTP/S URL

🌎 Unicode Support

To offer greater i18n support, functions denoted with a 🌎 globe emoji implement limited Unicode character classes to provide greater flexibility than ASCII alternatives (e.g., \p{Script=Latin} instead of [a-zA-Z]). Over time, efforts will be made to expand this library's i18n support wherever it's possible to do so without compromising security.

!IMPORTANT Broadly permissive Unicode character classes like \p{Letter} will never be used by any utilities in this library due to their potential security implications (right-to-left override attacks, homoglyph attacks, etc.).

Supported Unicode Character Classes

Unicode Character ClassReference of Included Characters
\p{Script=Latin}Unicode Latin Script Characters

🤝 Contributing

Pull requests are welcome! Before you begin, please check existing GitHub Issues and Pull Requests to see if your idea is already in the pipeline. If not, here's a guide on how to contribute to this project. Thank you!

📝 License

All files, scripts, and source code contained herein are open-source software licensed under an MIT License.

See LICENSE for more information.

💬 Contact

Trevor Anderson — Trevor@Nerdware.cloud@TeeRevTweets

Dare Mighty Things.

1.7.0-next.1

1 year ago

1.7.1-next.1

11 months ago

1.4.6

1 year ago

1.4.5

1 year ago

1.7.1

11 months ago

1.7.0

1 year ago

1.6.1

1 year ago

1.6.0

1 year ago

1.4.2

1 year ago

1.5.0

1 year ago

1.5.0-next.1

1 year ago

1.5.0-next.2

1 year ago

1.6.1-next.1

1 year ago

1.4.8

1 year ago

1.4.7

1 year ago

1.4.8-next.1

1 year ago

1.4.1

1 year ago

1.3.0-next.1

1 year ago

1.4.0

1 year ago

1.3.0

1 year ago

1.2.5

1 year ago

1.2.4

1 year ago

1.2.3

1 year ago

1.2.2

1 year ago

1.2.0

1 year ago

1.2.1

1 year ago

1.1.2

1 year ago

1.1.1

1 year ago

1.1.0

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.0

1 year ago