Sha256: 74d1e28252879785231fff000525ece199844062d092da660c793e0affd4c93d
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
require "reredos/version" module Reredos class Error < StandardError; end EMAIL_MAX_LENGTH = 256 # メールアドレスの最大長 DOMAIN_MAX_LENGTH = 255 # ドメインの最大長 DOMAIN_LABEL_MAX_LENGTH = 63 # ドメインラベルの最大長 USERNAME_MAX_LENGTH = 64 # ユーザネームの最大長 class << self def valid_email?(str) return false if str.length > EMAIL_MAX_LENGTH return false if str.count('@') != 1 # @は一度だけ username, domain = str.split('@') valid_username?(username) && valid_domain?(domain) end private def valid_domain?(str) return false if str.length > DOMAIN_MAX_LENGTH return false unless str.split('.').all? { |l| valid_label?(l) } true end def valid_username?(str) return false if str.length > USERNAME_MAX_LENGTH return false if str[0] == '.' || str[-1] == '.' /\A[0-9a-zA-Z\.\+\-\_]+\z/ === str # 既定の文字のみで構成されている end # ラベルはアルファベットで始まり、アルファベットか数字かハイフンが続き、アルファベットか数字で終わる def valid_label?(str) return false if str.empty? return false if str.length > DOMAIN_LABEL_MAX_LENGTH return false unless letter?(str[0]) return false unless alphanumeric?(str[-1]) return true if str[1...-1].empty? str[1...-1].chars.all? { |c| hyphen_or_alphanumeric?(c) } end def letter?(char) ('a'..'z').include?(char) || ('A'..'Z').include?(char) end def digit?(char) ('0'..'9').include?(char) end def alphanumeric?(char) letter?(char) || digit?(char) end def hyphen_or_alphanumeric?(char) char == '-' || alphanumeric?(char) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
reredos-0.1.2 | lib/reredos.rb |