Method: JSONSchemer::Format::Hostname#valid_hostname?

Defined in:
lib/json_schemer/format/hostname.rb

#valid_hostname?(data) ⇒ Boolean



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/json_schemer/format/hostname.rb', line 42

def valid_hostname?(data)
  data.split('.').map do |a_label|
    return false if a_label.size > 63
    u_label = SimpleIDN.to_unicode(a_label)
    # https://datatracker.ietf.org/doc/html/rfc5891#section-4.2.3.1
    return false if u_label.slice(2, 2) == '--'
    return false if ARABIC_INDIC_DIGITS_REGEX.match?(u_label) && ARABIC_EXTENDED_DIGITS_REGEX.match?(u_label)
    u_label.gsub!(CONTEXT_REGEX, 'ok')
    u_label.gsub!(KATAKANA_MIDDLE_DOT_REGEX, 'ok') if KATAKANA_MIDDLE_DOT_CONTEXT_REGEX.match?(u_label)
    u_label
  end.join('.').match?(HOSTNAME_REGEX)
rescue SimpleIDN::ConversionError
  false
end