Street addresses are complicated. They should be easy. They’re hard because: An address is not a single unit of data; it involves 2 to 6 different pieces Addresses are irregular and unpredictable (can’t be matched with regular expressions) An address can be sort-of valid without being fully valid Addresses are often the source of confusion for customers at checkout At SmartyStreets, we addressed the problem (pun intended) by creating an event-based, highly autonomous jQuery plugin which hooks into an authoritative address API. We affectionately call it jQuery.liveaddress. You can see it in action on this LiveAddress documentation page.