No release in over 3 years
Low commit activity in last 3 years
StreetAddress::US allows you to send any string to parse and if the string is a US address returns an object of the address broken into it's substituent parts. A port of Geo::StreetAddress::US by Schuyler D. Erle and Tim Bunce.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies
 Project Readme

Gem Version CI

StreetAddress

Parses a US street address string and returns a normalized Address object. Returns nil when the string is not a recognized US address format.

This is a port of the Perl module Geo::StreetAddress::US originally written by Schuyler D. Erle.

Ruby Version

Requires Ruby 3.3 or later. For Ruby 2.x support, use gem version 1.0.6.

Installation

gem install StreetAddress

then in your code

require 'street_address'

or in your Gemfile

gem 'StreetAddress', require: 'street_address'

Basic Usage

require 'street_address'

address = StreetAddress::US.parse("1600 Pennsylvania Ave, Washington, DC, 20500")
address.number      # "1600"
address.street      # "Pennsylvania"
address.street_type # "Ave"
address.city        # "Washington"
address.state       # "DC"
address.state_name  # "District Of Columbia"
address.postal_code # "20500"
address.intersection? # false
address.to_s        # "1600 Pennsylvania Ave, Washington, DC 20500"
address.to_s(:line1) # "1600 Pennsylvania Ave"
address.to_s(:line2) # "Washington, DC 20500"
address.to_h        # { number: "1600", street: "Pennsylvania", ... }

address = StreetAddress::US.parse("1600 Pennsylvania Ave")
address.street # "Pennsylvania"
address.number # "1600"
address.state  # nil

ZIP+4 Support

address = StreetAddress::US.parse("5904 Richmond Hwy Ste 340 Alexandria VA 22303-1864")
address.postal_code     # "22303"
address.postal_code_ext # "1864"
address.full_postal_code # "22303-1864"

# Also works without the hyphen
address = StreetAddress::US.parse("5904 Richmond Hwy Ste 340 Alexandria VA 223031864")
address.postal_code_ext # "1864"

Intersection Parsing

address = StreetAddress::US.parse("Hollywood Blvd and Vine St, Los Angeles, CA")
address.intersection? # true
address.street        # "Hollywood"
address.street_type   # "Blvd"
address.street2       # "Vine"
address.street_type2  # "St"

Stricter Parsing

address = StreetAddress::US.parse_address("1600 Pennsylvania Avenue")
# nil - not enough information to be a full address

address = StreetAddress::US.parse_address("1600 Pennsylvania Ave, Washington, DC, 20500")
# Returns Address object - full address provided

Known Limitations

  • US addresses only (returns nil for international addresses)
  • PO Boxes are not supported
  • Military addresses (APO/FPO) are not supported
  • Rural routes (RR) and highway contract routes (HC) are not supported
  • Addresses ending in "United States" or "USA" may not parse correctly

License

The MIT License

Copyright (c) 2007-2026 Derrek Long and Contributors