element.version === currentVersion)) { versionNodes.unshift({ version: currentVersion, url: "#" }); } document.querySelector("#project-version").innerHTML = versionNodes.reduce( (acc, element) => { const status = currentVersion === element.version ? "selected disabled" : ""; return ` ${acc} `; }, `
zeroreg · v1.0.0

zeroreg

Write regex without the tears or confusion.

zeroreg is a Gleam port of zeroreg-go: a small, readable regex builder with pre-built patterns for common validation tasks.

Status

This package currently targets Erlang/OTP because the runtime helpers use Erlang’s re module.

Installation

gleam add zeroreg

Usage

import zeroreg

pub fn phone() {
  let phone_pattern =
    zeroreg.optional_str("+")
    |> zeroreg.then(zeroreg.digit(3))
    |> zeroreg.then_str("-")
    |> zeroreg.then(zeroreg.digit(3))
    |> zeroreg.then_str("-")
    |> zeroreg.then(zeroreg.digit(4))

  zeroreg.matches(phone_pattern, "+123-456-7890")
}

You can also use the built-in patterns:

import zeroreg/patterns

pub fn valid_email(input: String) -> Bool {
  patterns.email()
  |> patterns.matches(input)
}

Builder API

Character classes:

  • digit(count)
  • non_digit()
  • word()
  • non_word()
  • whitespace()
  • non_whitespace()
  • letter()
  • lowercase()
  • uppercase()
  • alphanumeric()
  • any()
  • literal(string)
  • char_in(chars)
  • char_not_in(chars)
  • range(from, to)

Composition:

  • then(pattern, next)
  • then_str(pattern, string)
  • or_(pattern, other)
  • or_str(pattern, string)
  • group(pattern)
  • capture(pattern)
  • named_capture(pattern, name)
  • one_of(patterns)
  • one_of_str(strings)

Quantifiers:

  • one_or_more(pattern)
  • zero_or_more(pattern)
  • optional(pattern)
  • times(pattern, count)
  • between(pattern, min, max)
  • at_least(pattern, min)
  • at_most(pattern, max)

Anchors and escapes:

  • start_of_line()
  • end_of_line()
  • word_boundary()
  • non_word_boundary()
  • newline()
  • tab()
  • carriage_return()

Runtime helpers:

  • source(pattern)
  • matches(pattern, input)
  • match(pattern, input)
  • match_all(pattern, input)
  • replace(pattern, input, replacement)

Pre-built Patterns

The zeroreg/patterns module includes:

  • email
  • url
  • phone
  • date
  • time
  • ipv4
  • ipv6
  • hex_color
  • hex
  • uuid
  • slug
  • hashtag
  • mention
  • credit_card
  • ssn
  • zip_code
  • username
  • semver
  • mac_address

And strong_password(input) as a helper function.

Search Document