Valid Hostname
- Source: https://github.com/AlphaNodes/valid_hostname
- Bugs: https://github.com/AlphaNodes/valid_hostname/issues
Description
Extension to ActiveModel for validating hostnames and domain names.
Features
- Adds validation for hostnames to ActiveModel
- Supports I18n for the error messages
Installation
in Gemfile
gem 'valid_hostname', '~> 2.0'
Run bundler
bundle install
Validations performed
- maximum length of hostname is 255 characters
- maximum length of each hostname label is 63 characters
- characters allowed in hostname labels are a-z, A-Z, 0-9 and hyphen
- labels do not begin or end with a hyphen
- labels do not consist of numeric values only
Options
- option to allow for underscores in hostname labels
- option to require that the last label is a valid TLD (ie. require that the name is a FQDN)
- option to allow numeric values in the first label of the hostname (exception: the hostname cannot consist of a single numeric label)
- option to specify a list of valid TLDs
- options to allow for wildcard hostname in first label (for use with DNS)
- option to configure error message. verbose: true creates detailed error messages. (only used by )
See also https://www.zytrax.com/books/dns/apa/names.html
How to use
Simple usage
class Record < ActiveRecord::Base
validates :name, hostname: true
end
With options
class Record < ActiveRecord::Base
validates :name, hostname: { OPTIONS }
end
or static usage
ValidateHostname.valid?('localhost')
or static usage with options
ValidateHostname.valid?('localhost', OPTIONS)
Options and their defaults
- allow_underscore: false
- require_valid_tld: false
- valid_tlds: Array of allowed TLDs (can only be used with require_valid_tld: true)
- allow_numeric_hostname: false
- allow_wildcard_hostname: false
- allow_root_label: false
- verbose: true
Examples
Without options
class Record < ActiveRecord::Base
validates :host, hostname: true
end
>> @record = Record.new :name => 'horse'
>> @record.save
=> true
>> @record2 = Record.new :name => '_horse'
>> @record2.save
=> false
With :allow_underscore
class Record < ActiveRecord::Base
validates :name, hostname: { allow_underscore: true }
end
>> @record3 = Record.new :name => '_horse'
>> @record3.save
=> true
With :require_valid_tld
class Record < ActiveRecord::Base
validates :name, hostname: { require_valid_tld: true }
end
>> @record4 = Record.new :name => 'horse'
>> @record4.save
=> false
>> @record5 = Record.new :name => 'horse.com'
>> @record5.save
=> true
With :valid_tlds
class Record < ActiveRecord::Base
validates :name, hostname: { :require_valid_tld, valid_tlds: %w[com org net] }
end
>> @record6 = Record.new :name => 'horse.info'
>> @record6.save
=> false
With :allow_numeric_hostname
class Record < ActiveRecord::Base
validates :name, hostname: { allow_numeric_hostname: false }
end
>> @record7 = Record.new :name => '123.info'
>> @record7.save
=> false
With :allow_wildcard_hostname
class Record < ActiveRecord::Base
validates :name, hostname: { allow_wildcard_hostname: true }
end
>> @record8 = Record.new :name => '*.123.info'
>> @record8.save
=> true
Extra validators
domainname
- sets require_valid_tld: true
- sets allow_numeric_hostname: true
- returns error if there is only one label and this label is numeric
Credits
This gem is a fork of https://github.com/KimNorgaard.
Copyright
Copyright (c) 2009-2022 Kim Norgaard. See LICENSE for details Copyright (c) 2022 Alexander Meindl. See LICENSE for details