Module: Olyx::Guardrails::Text::Normalizer
- Defined in:
- lib/olyx/guardrails/text/normalizer.rb
Overview
Produces a bounded comparison form for common Unicode evasions.
Constant Summary collapse
- ZERO_WIDTH =
/[\u200B-\u200D\u2060\uFEFF]/- HOMOGLYPHS =
{ 'Α' => 'A', 'А' => 'A', 'Β' => 'B', 'В' => 'B', 'Ε' => 'E', 'Е' => 'E', 'Η' => 'H', 'Н' => 'H', 'Ι' => 'I', 'І' => 'I', 'Κ' => 'K', 'К' => 'K', 'Μ' => 'M', 'М' => 'M', 'Ν' => 'N', 'О' => 'O', 'Ρ' => 'P', 'Р' => 'P', 'С' => 'C', 'Τ' => 'T', 'Т' => 'T', 'Χ' => 'X', 'Х' => 'X', 'а' => 'a', 'е' => 'e', 'і' => 'i', 'о' => 'o', 'р' => 'p', 'с' => 'c', 'х' => 'x', 'у' => 'y' }.freeze
Class Method Summary collapse
Class Method Details
.call(value) ⇒ Object
20 21 22 |
# File 'lib/olyx/guardrails/text/normalizer.rb', line 20 def call(value) value.to_s.each_char.filter_map { |character| normalize_character(character) }.join end |
.normalize_character(character) ⇒ Object
24 25 26 27 28 29 30 31 |
# File 'lib/olyx/guardrails/text/normalizer.rb', line 24 def normalize_character(character) return if character.match?(ZERO_WIDTH) normalized = character.unicode_normalize(:nfkc) HOMOGLYPHS.fetch(normalized, normalized) rescue Encoding::CompatibilityError, ArgumentError character end |