Решение на Четвърта задача от Любомир Ятански

Обратно към всички решения

Към профила на Любомир Ятански

Резултати

  • 2 точки от тестове
  • 0 бонус точки
  • 2 точки общо
  • 17 успешни тест(а)
  • 24 неуспешни тест(а)

Код

class PrivacyFilter
EMAIL_SUBSTITUTE = "[EMAIL]"
PHONE_SUBSTITUTE = "[PHONE]"
DATA_SUBSTITUTE = "[FILTERED]"
USERNAME_UNOBFUSCATED_SYMBOLS_CNT = 3
USERNAME_PARTIAL_OBFUSCATION_MIN_LENGTH = 6
attr_accessor :preserve_phone_country_code, :preserve_email_hostname, :partially_preserve_email_username
def initialize text
@text = text
end
def preserve_host hostname
preserve_email_hostname ? (DATA_SUBSTITUTE + hostname) : EMAIL_SUBSTITUTE
end
def filtered_mail
@text.gsub /([a-zA-Z0-9](\w|[+-]){,200})(@([a-zA-Z0-9][a-zA-Z0-9-]{,60}[a-zA-Z0-9])(\.\g<1>)*\.[a-zA-Z]{2,3})/ do
partially_preserve_email_username ? $1.slice(0, 3) + DATA_SUBSTITUTE + $3 : preserve_host($3)
end
end
def filtered
filtered_mail.gsub /(0|((00|\+)[1-9]\d{1,2}))([- ()]{,2}\d){6,11}/ do
preserve_phone_country_code ? ($1 + " " +DATA_SUBSTITUTE) : PHONE_SUBSTITUTE
end
end
end
class Validations
def self.email? value
username?(value.split('@')[0]) and hostname?(value.split('@')[1])
end
def self.phone? value
value =~ /^(0|((00|\+)[1-9]\d{1,2}))([- ()]{,2}\d){6,11}$/ ? true : false
end
def self.username? value
value =~ /^[a-zA-Z0-9](\w|[+-]){,200}$/ ? true : false
end
def self.hostname? value
value =~ /^([a-zA-Z0-9][a-zA-Z0-9-]{,60}[a-zA-Z0-9])(\.\g<1>)*\.[a-zA-Z]{2,3}$/ ? true : false
end
def self.ip_address? value
value =~ /^(25[0-5]|2[0-4]\d|[01]?\d\d?)(\.\g<1>){3}$/ ? true : false
end
def self.number? value
value =~ /^[-+]?(0|[1-9]\d*)\.?[0-9]+$/ ? true : false
end
def self.integer? value
value =~ /^[-+]?(0|[1-9]\d*)$/ ? true : false
end
def self.date? value
value =~ /^\d{4}-(0\d|1[0-2])-([0-2]\d|3[01])$/ ? true : false
end
def self.time? value
value =~ /^([01]\d|2[0-3]):(0\d|5[0-9]):\g<2>$/ ? true : false
end
def self.date_time? value
date?(value.split(/ |T/)[0]) and time?(value.split(/ |T/)[1])
end
end

Лог от изпълнението

▸ Покажи лога

История (1 версия и 0 коментара)

Любомир обнови решението на 28.11.2012 03:08 (преди над 12 години)

▸ Покажи разликите
+class PrivacyFilter
+ EMAIL_SUBSTITUTE = "[EMAIL]"
+ PHONE_SUBSTITUTE = "[PHONE]"
+ DATA_SUBSTITUTE = "[FILTERED]"
+
+ USERNAME_UNOBFUSCATED_SYMBOLS_CNT = 3
+ USERNAME_PARTIAL_OBFUSCATION_MIN_LENGTH = 6
+
+ attr_accessor :preserve_phone_country_code, :preserve_email_hostname, :partially_preserve_email_username
+
+ def initialize text
+ @text = text
+ end
+
+ def preserve_host hostname
+ preserve_email_hostname ? (DATA_SUBSTITUTE + hostname) : EMAIL_SUBSTITUTE
+ end
+
+ def filtered_mail
+ @text.gsub /([a-zA-Z0-9](\w|[+-]){,200})(@([a-zA-Z0-9][a-zA-Z0-9-]{,60}[a-zA-Z0-9])(\.\g<1>)*\.[a-zA-Z]{2,3})/ do
+ partially_preserve_email_username ? $1.slice(0, 3) + DATA_SUBSTITUTE + $3 : preserve_host($3)
+ end
+ end
+
+ def filtered
+ filtered_mail.gsub /(0|((00|\+)[1-9]\d{1,2}))([- ()]{,2}\d){6,11}/ do
+ preserve_phone_country_code ? ($1 + " " +DATA_SUBSTITUTE) : PHONE_SUBSTITUTE
+ end
+ end
+
+end
+
+class Validations
+ def self.email? value
+ username?(value.split('@')[0]) and hostname?(value.split('@')[1])
+ end
+
+ def self.phone? value
+ value =~ /^(0|((00|\+)[1-9]\d{1,2}))([- ()]{,2}\d){6,11}$/ ? true : false
+ end
+
+ def self.username? value
+ value =~ /^[a-zA-Z0-9](\w|[+-]){,200}$/ ? true : false
+ end
+
+ def self.hostname? value
+ value =~ /^([a-zA-Z0-9][a-zA-Z0-9-]{,60}[a-zA-Z0-9])(\.\g<1>)*\.[a-zA-Z]{2,3}$/ ? true : false
+ end
+
+ def self.ip_address? value
+ value =~ /^(25[0-5]|2[0-4]\d|[01]?\d\d?)(\.\g<1>){3}$/ ? true : false
+ end
+
+ def self.number? value
+ value =~ /^[-+]?(0|[1-9]\d*)\.?[0-9]+$/ ? true : false
+ end
+
+ def self.integer? value
+ value =~ /^[-+]?(0|[1-9]\d*)$/ ? true : false
+ end
+
+ def self.date? value
+ value =~ /^\d{4}-(0\d|1[0-2])-([0-2]\d|3[01])$/ ? true : false
+ end
+
+ def self.time? value
+ value =~ /^([01]\d|2[0-3]):(0\d|5[0-9]):\g<2>$/ ? true : false
+ end
+
+ def self.date_time? value
+ date?(value.split(/ |T/)[0]) and time?(value.split(/ |T/)[1])
+ end
+end