DEV Community

Onorio Catenacci
Onorio Catenacci

Posted on

A Quick Utility Module

I was working on some code with a friend of mine and we came up with what seems a relatively clever way to do a couple of validations. I'm putting this post here to share this in case it benefits anyone else:

defmodule Validations do @moduledoc """ This module contains a few validation predicate functions. """ @doc """ Checks if a string contains only specified characters. The specified characters are passed in a list. The list can be one or more characters. You could pass an empty list if you wished but that would always return false. ## Examples iex> Validations.string_contains_only_specified_chars?("abc", ["a", "b", "c"]) true iex> Validations.string_contains_only_specified_chars?("abr", ["a", "b", "c"]) false """ @spec string_contains_only_specified_chars?(String.t(), [String.t(), ...]) :: boolean def string_contains_only_specified_chars?(string, list) when is_binary(string) and is_list(list) do string |> String.graphemes() |> Enum.reduce(true, fn letter, acc -> letter in list && acc end) end @doc """ Checks if a string is of a specified length or not. ## Examples iex> Validations.string_expected_length?("abc", 3) true iex> Validations.string_expected_length?("abc", 2) false """ @spec string_expected_length?(String.t(), integer) :: boolean def string_expected_length?(string, length) when is_binary(string) and is_integer(length) do String.length(string) == length end end 
Enter fullscreen mode Exit fullscreen mode

Nothing innovative or surprising--just a little something I whipped up that I wanted to share for the potential benefit of others.

Top comments (0)