FORMAT = /([0,1]{1})?([-| \.]+)?\(?([0-9]{1,3})\)?([- \.]+)??([0-9]{3})([- \.]?)+([0-9]{4})/ phone_numbers = [ "(520) 999.9999", "520.999.9999", "(520) 999 9999", "5209999999", "(520)-555-5555", "520.999.9999"] phone_numbers.each do |pn| p pn.match(FORMAT)[0] end