Skip to content

Helena-Lynd/input-sanitization

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

input-sanitization

A JavaScript library for validating and sanitizing book-related input data. This project provides utilities for validating book titles, comparing titles flexibly, parsing page ranges, and sanitizing HTML content.

Program Output

Description

This library is designed for applications that need to handle book information safely and reliably. It includes input validation functions that handle edge cases like Unicode normalization, diacritics, ligatures, and malicious input patterns.

Features

  • Book Title Validation: Validate book titles with customizable rules and blocklists
  • Title Comparison: Compare book titles flexibly, handling diacritics, ligatures, and Unicode variations
  • Page Range Parsing: Parse and count pages from range specifications (e.g., "1-3,5-6,p9")
  • HTML Sanitization: Clean user-supplied HTML to only allow safe tags (currently <b> and <i>)
  • Unicode-Aware: Handles international characters, diacritics, combining marks, and bidirectional text

Getting Started

Requirements

  • npm command line tools

Installation

npm install

Usage

Import the module

const validator = require('./src/book-validator');

Available Functions

isTitle(str)

Validates if a string is a valid book title.

Rules:

  • Cannot be any form of "Boaty McBoatface" (case-insensitive blocklist)
  • Only English alphabet characters, Arabic numerals, spaces, hyphens, and quotes allowed
  • No leading or trailing whitespace
  • No control characters (tabs, newlines, etc.)
  • Supports Unicode letters and diacritics

Example:

validator.isTitle('War and Peace')        // true
validator.isTitle('Boaty McBoatface')     // false (blocklisted)
validator.isTitle('  Leading space')      // false (has leading space)
validator.isTitle('Mañana')               // true

isSameTitle(strA, strB)

Compares two titles for semantic similarity, useful for search features.

Comparison rules:

  • Ignores leading/trailing whitespace
  • Normalizes diacritics and combining marks
  • Treats ligatures as their letter equivalents (æ → ae, ß → ss, etc.)
  • Removes bidirectional control characters and zalgo text

Example:

validator.isSameTitle('naïve', 'naive')   // true
validator.isSameTitle('café', 'cafe')     // true
validator.isSameTitle('  The Book  ', 'The Book')  // true

countPages(pageRangeStr)

Parses a page range string and counts the total number of pages.

Format:

  • Single page: 1, p3
  • Range: 1-2, 10-100
  • Multiple ranges: 1-3,5-6,9
  • Whitespace is ignored

Returns:

  • Number of pages (counted inclusively)
  • 0 if format is invalid
  • undefined if string is malformed or exceeds 1000 characters

Example:

validator.countPages('1')              // 1
validator.countPages('1-3')            // 3
validator.countPages('1-3,5-6,9')      // 6
validator.countPages('10-100')         // 91

cleanPageNum(str)

Extracts and validates a page number from a string.

Accepts:

  • Plain numbers: 123
  • With "p" prefix: p123
  • With surrounding whitespace

Returns:

  • Integer page number
  • undefined if invalid or not a safe integer

Example:

validator.cleanPageNum('p42')          // 42
validator.cleanPageNum('  100  ')      // 100
validator.cleanPageNum('invalid')      // undefined

cleanForHTML(dirtyHTML)

Sanitizes HTML to prevent injection attacks, allowing only <b> and <i> tags.

Example:

validator.cleanForHTML('Hello <b>world</b>')                    // 'Hello <b>world</b>'
validator.cleanForHTML('Click <script>alert("xss")</script>')   // 'Click &lt;script&gt;...'
validator.cleanForHTML('<b>Bold</b> and <i>italic</i>')         // '<b>Bold</b> and <i>italic</i>'

sum(a, b)

Basic utility function for testing (returns a + b).

Testing

Run the test suite with:

npm test

Tests are written with Jest and cover:

  • Title validation with various character types
  • Unicode handling (diacritics, combining marks, ligatures)
  • Title comparison normalization
  • Page range parsing edge cases
  • HTML sanitization

Author

Helena Lynd

About

A JavaScript library for validating and sanitizing input.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors