CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-ulid

A universally-unique, lexicographically-sortable, identifier generator

78

1.34x
Overview
Eval results
Files

validation.mddocs/

Validation

ULID format validation to ensure proper structure, length, and character encoding according to the ULID specification.

Capabilities

ULID Validation

Validates whether a string is a properly formatted ULID.

/**
 * Check if a ULID is valid
 * @param id - The string to validate
 * @returns True if the string is a valid ULID, false otherwise
 */
function isValid(id: string): boolean;

Usage Examples:

import { isValid, ulid } from "ulid";

// Validate generated ULID
const id = ulid();
console.log(isValid(id)); // true

// Validate existing ULIDs
console.log(isValid("01HNZX8JGFACFA36RBXDHEQN6E")); // true
console.log(isValid("01ARYZ6S41TSV4RRFFQ69G5FAV")); // true

// Invalid cases
console.log(isValid("")); // false - empty string
console.log(isValid("invalid")); // false - wrong length
console.log(isValid("01HNZX8JGFACFA36RBXDHEQN6")); // false - too short
console.log(isValid("01HNZX8JGFACFA36RBXDHEQN6EX")); // false - too long
console.log(isValid("01HNZX8JGFACFA36RBXDHEQN6U")); // false - invalid character 'U'
console.log(isValid("81HNZX8JGFACFA36RBXDHEQN6E")); // false - invalid first character

// Use in conditional logic
function processULID(id: string) {
  if (!isValid(id)) {
    throw new Error(`Invalid ULID: ${id}`);
  }
  // Process valid ULID
  return id.toLowerCase();
}

// Filter valid ULIDs from array
const ids = ["01HNZX8JGFACFA36RBXDHEQN6E", "invalid", "01ARYZ6S41TSV4RRFFQ69G5FAV"];
const validIds = ids.filter(isValid);
console.log(validIds); // ["01HNZX8JGFACFA36RBXDHEQN6E", "01ARYZ6S41TSV4RRFFQ69G5FAV"]

Validation Rules:

The isValid function checks that the input string:

  1. Is a string type - Non-string values return false
  2. Has correct length - Must be exactly 26 characters
  3. Uses valid characters - All characters must be from Crockford Base32 alphabet
  4. Has valid first character - Must be 0-7 (ensures timestamp doesn't exceed maximum)

Crockford Base32 Alphabet:

Valid characters: 0123456789ABCDEFGHJKMNPQRSTVWXYZ

Excluded characters: I, L, O, U (to avoid confusion with similar-looking characters)

Case Sensitivity:

The validation function is case-insensitive. Both uppercase and lowercase characters are accepted:

console.log(isValid("01hnzx8jgfacfa36rbxdheqn6e")); // true - lowercase
console.log(isValid("01HNZX8JGFACFA36RBXDHEQN6E")); // true - uppercase  
console.log(isValid("01HnZx8JgFaCfA36RbXdHeQn6E")); // true - mixed case

Performance Notes:

  • The validation is performed using regular expressions for efficiency
  • Case conversion is handled internally without modifying input
  • No exceptions are thrown - invalid inputs return false

Install with Tessl CLI

npx tessl i tessl/npm-ulid

docs

base32-utilities.md

generation.md

index.md

time-utilities.md

uuid-conversion.md

validation.md

tile.json