Example

Postal Addresses

International mailing addresses.

Parse international postal addresses into structured fields.

What it shows

  • $flags: FLEXIBLE_WHITESPACE lets patterns tolerate any whitespace between tokens.
  • Country::UnitedStates accepts both USA and United States.
  • StreetAddress exposes its number and street; addresses may also have attention, unit, and region fields.
  • PostalCode accepts UK, German/Swiss, and US forms.
  • Two address patterns cover both locality postalCode and postalCode locality order.

Try adding a new country, accepting Suite before unit, or adding a phone field.

Specs

spec.yml
$flags: 'FLEXIBLE_WHITESPACE'

Country:
  UnitedKingdom: 'United Kingdom'
  Germany: 'Germany'
  Switzerland: 'Switzerland'
  UnitedStates: [ 'USA', 'United States' ]

PostalCode: '[A-Z]{1,2}\d[A-Z\d]? \d[A-Z]{2}|\d{4,5}(-\d{4})?'

UnitNumber: '\d+[A-Za-z]*'

PostalAddress:
  $types:
    String: '.+?'
    Region: '[A-Z]{2}'
    StreetAddress:
      $fields: { number: UnitNumber, street: String }
      $patterns: ['#{number} #{street}', '#{street} #{number}']
  $fields:
    addressee: String
    attention: String
    unit: UnitNumber
    streetAddress: StreetAddress
    locality: String
    region: Region
    postalCode: PostalCode
    country: Country
  $patterns:
    - '#{addressee},( Attn: #{attention},)?( Apt #{unit},)? #{streetAddress}, #{locality}(, #{region})? #{postalCode}, #{country}'
    - '#{addressee},( Attn: #{attention},)?( Apt #{unit},)? #{streetAddress}, #{postalCode} #{locality}(, #{region})?, #{country}'
Try it liveOpen Postal Addresses in StudioTweak the spec, paste your own input, and see the parse tree update in real time.

Or browse other examples →