I have a confession to make: this article was actually implemented in VB6 originally. The meat of it is the same, but here’s the VB6 edition in case it’s of interest to anybody.
Enjoy!
Private Sub Form_Load() Call ClearControls End Sub Private Sub ClearControls() uxHouseNumber = "" uxStreetPrefix = "" uxStreetName = "" uxStreetType = "" uxStreetSuffix = "" uxApt = "" uxAdditionalInfo = "" End Sub '--------------------------------------------------------------------------------------- ' Procedure : ConstructRegex ' Purpose : Returns a regular expression pattern for parsing US street addresses '--------------------------------------------------------------------------------------- ' Private Function ConstructRegex() As String ' ConstructRegex = "^" & _ -> begin string ' "(\d+)" & _ -> 1 or more digits ' "(\s+(?:" & GetStreetPrefixes() & "))?" & _ -> whitespace + valid prefix (optional) ' "(\s+.*?)" & _ -> whitespace + one or characters ' "(?:" & _ -> group (optional) { ' "(\s+(?:" & GetStreetTypes() & "))" & _ -> whitespace + valid street type ' "(\s+(?:" & GetStreetSuffixes() & "))?" & _-> whitespace + valid street suffix (optional) ' "(\s+.*)?" & _ -> whitespace + anything else (optional) ' ")?" & _ -> } ' "$" -> end string ConstructRegex = "^" & _ "(\d+)" & _ "(\s+(?:" & GetStreetPrefixes() & "))?" & _ "(\s+.*?)" & _ "(?:" & _ "(\s+(?:" & GetStreetTypes() & "))" & _ "(\s+(?:" & GetStreetSuffixes() & "))?" & _ "(\s+.*)?" & _ ")?" & _ "$" End Function '--------------------------------------------------------------------------------------- ' Procedure : GetStreetPrefixes ' Purpose : Returns a pipe-delimited list of valid street prefixes '--------------------------------------------------------------------------------------- ' Private Function GetStreetPrefixes() As String GetStreetPrefixes = "TE|NW|HW|RD|E|MA|EI|NO|AU|SE|GR|OL|W|MM|OM|SW|ME|HA|JO|OV|S|OH|NE|K|N" End Function '--------------------------------------------------------------------------------------- ' Procedure : GetStreetTypes ' Purpose : Returns a pipe-delimited list of valid street types '--------------------------------------------------------------------------------------- ' Private Function GetStreetTypes() As String GetStreetTypes = "TE|STCT|DR|SPGS|PARK|GRV|CRK|XING|BR|PINE|CTS|TRL|VI|RD|PIKE|MA|LO|TER|UN|CIR|WALK|CO|RUN|FRD|LDG|ML|AVE|NO|PA|SQ|BLVD|VLGS|VLY|GR|LN|HOUSE|VLG|OL|STA|CH|ROW|EXT|JC|BLDG|FLD|CT|HTS|MOTEL|PKWY|COOP|ACRES|ESTS|SCH|HL|CORD|ST|CLB|FLDS|PT|STPL|MDWS|APTS|ME|LOOP|SMT|RDG|UNIV|PLZ|MDW|EXPY|WALL|TR|FLS|HBR|TRFY|BCH|CRST|CI|PKY|OV|RNCH|CV|DIV|WA|S|WAY|I|CTR|VIS|PL|ANX|BL|ST TER|DM|STHY|RR|MNR" End Function '--------------------------------------------------------------------------------------- ' Procedure : GetStreetSuffixes ' Purpose : Returns a pipe-delimited list of valid street suffixes '--------------------------------------------------------------------------------------- ' Private Function GetStreetSuffixes() As String GetStreetSuffixes = "NW|E|SE|W|SW|S|NE|N" End Function '--------------------------------------------------------------------------------------- ' Procedure : uxAddress_Change ' Purpose : Parses user input and displays components to user '--------------------------------------------------------------------------------------- ' Private Sub uxAddress_Change() Dim strInput As String Dim re As RegExp Dim mc As MatchCollection Dim ma As Match Call ClearControls strInput = UCase$(uxAddress.Text) Set re = New RegExp re.Pattern = ConstructRegex() re.Global = True If re.Test(strInput) Then Set mc = re.Execute(strInput) Set ma = mc(0) uxHouseNumber = Trim$(ma.SubMatches(0)) uxStreetPrefix = Trim$(ma.SubMatches(1)) uxStreetName = Trim$(ma.SubMatches(2)) uxStreetType = Trim$(ma.SubMatches(3)) uxStreetSuffix = Trim$(ma.SubMatches(4)) uxApt = Trim$(ma.SubMatches(5)) Set ma = Nothing Set mc = Nothing Else uxStreetName = strInput End If Set re = Nothing End Sub
Wow! After all I got a website from where I know how
to truly obtain helpful facts concerning my study and knowledge.
Thiis is beautiful regex