sift/string
String validators — length, pattern matching, format checks (email, url, uuid).
Values
pub fn alpha(msg: String) -> fn(String) -> Result(String, String)
All characters must be letters (a-zA-Z).
let validator = string.alpha("letters only")
validator("abc") // -> Ok("abc")
validator("abc1") // -> Error("letters only")
pub fn alphanumeric(
msg: String,
) -> fn(String) -> Result(String, String)
All characters must be letters or digits.
let validator = string.alphanumeric("alphanumeric only")
validator("abc123") // -> Ok("abc123")
validator("abc 123") // -> Error("alphanumeric only")
pub fn contains(
substring: String,
msg: String,
) -> fn(String) -> Result(String, String)
String must contain the given substring
pub fn email(msg: String) -> fn(String) -> Result(String, String)
Must look like an email (contains exactly one @, something before and after).
let validator = string.email("invalid email")
validator("jo@example.com") // -> Ok("jo@example.com")
validator("nope") // -> Error("invalid email")
pub fn ends_with(
suffix: String,
msg: String,
) -> fn(String) -> Result(String, String)
String must end with the given suffix
pub fn length(
n: Int,
msg: String,
) -> fn(String) -> Result(String, String)
String must have exactly n graphemes
pub fn matches(
pattern: String,
msg: String,
) -> fn(String) -> Result(String, String)
String must match the given regex pattern.
let validator = string.matches("^[A-Z]{3}$", "must be 3 uppercase letters")
validator("ABC") // -> Ok("ABC")
validator("abc") // -> Error("must be 3 uppercase letters")
pub fn max_length(
n: Int,
msg: String,
) -> fn(String) -> Result(String, String)
String must have at most n graphemes
pub fn min_length(
n: Int,
msg: String,
) -> fn(String) -> Result(String, String)
String must have at least n graphemes
pub fn non_empty(
msg: String,
) -> fn(String) -> Result(String, String)
String must not be empty (shorthand for min_length(1))
pub fn numeric(
msg: String,
) -> fn(String) -> Result(String, String)
All characters must be digits (0-9).
let validator = string.numeric("digits only")
validator("123") // -> Ok("123")
validator("12a") // -> Error("digits only")
pub fn one_of(
values: List(String),
msg: String,
) -> fn(String) -> Result(String, String)
String must be one of the given values.
let validator = string.one_of(["admin", "user", "guest"], "invalid role")
validator("admin") // -> Ok("admin")
validator("root") // -> Error("invalid role")
pub fn starts_with(
prefix: String,
msg: String,
) -> fn(String) -> Result(String, String)
String must start with the given prefix
pub fn trimmed(
msg: String,
) -> fn(String) -> Result(String, String)
String must have no leading or trailing whitespace.
let validator = string.trimmed("no surrounding spaces")
validator("hello") // -> Ok("hello")
validator(" hello") // -> Error("no surrounding spaces")
pub fn url(msg: String) -> fn(String) -> Result(String, String)
Must look like a URL (http:// or https://).
let validator = string.url("invalid url")
validator("https://example.com") // -> Ok("https://example.com")
validator("example.com") // -> Error("invalid url")