Skip to content

Instantly share code, notes, and snippets.

@mjhea0
Forked from dbc-challenges/regular_expressions.rb
Last active December 17, 2015 08:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mjhea0/2ff75dce6a0a0d3b03f8 to your computer and use it in GitHub Desktop.
Save mjhea0/2ff75dce6a0a0d3b03f8 to your computer and use it in GitHub Desktop.
# Determine whether a string contains a Social Security number.
def has_ssn?(string)
true if string =~ /\d{3}-\d{2}-\d{4}/
end
puts "has_ssn? returns true if it has what looks like a SSN"
puts has_ssn?("please don't share this: 234-60-1422") == true
puts "has_ssn? returns false if it doesn't have a SSN"
puts has_ssn?("please confirm your identity: XXX-XX-1422") == false
# Return the Social Security number from a string.
def grab_ssn(string)
if string =~ /(\d{3}-\d{2}-\d{4})/
# $1 is the regex group in paranethesis above
ssn = $1
end
end
puts "grab_ssn returns an SSN if the string has an SSN"
puts grab_ssn("please don't share this: 234-60-1422") == "234-60-1422"
puts "grab_ssn returns nil if it doesn't have a SSN"
puts grab_ssn("please confirm your identity: XXX-XX-1422") == nil
# Return all of the Social Security numbers from a string.
def grab_all_ssns(string)
results = []
ssns = string.split(" ")
ssns.each do |ssn|
if grab_ssn(ssn)
results << grab_ssn(ssn)
end
end
results
end
puts "grab_all_ssns returns all SSNs if the string has any SSNs"
puts grab_all_ssns("234-60-1422, 350-80-0744, 013-60-8762") == ["234-60-1422", "350-80-0744", "013-60-8762"]
puts "grab_all_ssns returns an empty Array if it doesn't have any SSNs"
puts grab_all_ssns("please confirm your identity: XXX-XX-1422") == []
# Obfuscate all of the Social Security numbers in a string. Example: XXX-XX-4430.
def hide_all_ssns(string)
results = grab_all_ssns(string)
results.each do |ssn|
ssn.gsub!(/\d{3}-\d{2}/, 'XXX-XX')
end
if results.empty?
return string
else
results.join(", ")
end
end
puts "hide_all_ssns obfuscates any SSNs in the string"
puts hide_all_ssns("234-60-1422, 350-80-0744, 013-60-8762") == "XXX-XX-1422, XXX-XX-0744, XXX-XX-8762"
puts "hide_all_ssns does not alter a string without SSNs in it"
string = "please confirm your identity: XXX-XX-1422"
puts hide_all_ssns(string) == string
# Ensure all of the Social Security numbers use dashes for delimiters.
# Example: 480.01.4430 and 480014430 would both be 480-01-4430.
def format_ssns(string)
array = string.split(" ")
results = []
array.each do |ssn|
ssn.gsub!(/\W/, "")
results << "#{ssn[0..2]}-#{ssn[3..4]}-#{ssn[5..8]}"
end
if !has_ssn?(string)
return string
else
return results.join(", ")
end
end
puts "format_ssns finds and reformat any SSNs in the string"
puts format_ssns("234601422, 350.80.0744, 013-60-8762") == "234-60-1422, 350-80-0744, 013-60-8762"
puts "format_ssns does not alter a string without SSNs in it"
string = "please confirm your identity: 44211422"
puts format_ssns(string) == string
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment