ShowTable of Contents
Postal codes (also known as post codes or ZIP codes) are a series of characters appended to a postal address for the purpose of sorting mail. Many countries use 4, 5, 6, or 9 digit numeric strings, while others use both numbers and letters. In your form, you may want to accept a wide range of valid postal code formats while filtering invalid ones. You can do this by defining the field’s presentation format and providing input constraints.
Input Constraints
In particular, you must specify the patterns that the postal code fields may accept. For example, to specify a Canadian postal code (two sets of three alternating alphanumeric characters, such as V9A 1G2) you would create a pattern that allows:
- a letter
- a number
- a letter
- an optional space
- a number
- a letter
- a number
You must use a Unix-style regular expression to specify this pattern. For example, the following regular expression creates the pattern described above:
([A-Za-z]{1}[0-9]{1}[A-Za-z]{1})\s?([0-9]{1}[A-Za-z]{1}[0-9]{1})
A field formatted with only this expression would accept user input formatted in only two ways:
x#x #x#
x#x#x#
To add additional postal code styles, you need to add additional acceptable patterns. For example, to add 4, 5, or 6 character digit strings, or a 9 digit string that may contain a dash, you would add the following patterns:
(\\d{4})
(\\d{5})
(\\d{6})
(\\d{5})-?(\\d{4})
Presentation
For every pattern you create as an input constraint, you must have a corresponding presentation patternref. The patternref allows you to specify how the user’s input is displayed in the form. If there are multiple patterns, the first patternref corresponds to the first pattern, the second patternref corresponds to the second pattern, and so on. You must use a Unix-style regular expression to specify this patternref. The follow example shows the patternrefs for the 6 character alphanumeric code, the 4, 5, and 6 digit codes, and the 9 digit code that contains a dash:
\$1 \$2
\$1
\$1
\$1
\$1-\$2
Note that the patternref for the 4, 5, and 6 digit codes is exactly the same (indicating a single string). However, each must be listed separately to ensure they correspond with the correct input constraint pattern.
Examples
The following code sample shows how to accept multiple postal code formats and allow them to display in the format chosen by the user. This example also uses casetype to ensure that any letters are displayed as upper case:
<field sid="FIELD4">
<label>Postal/ZIP code</label>
<format>
<datatype>string</datatype>
<constraints>
<patterns>
<pattern>([A-Za-z]{1}[0-9]{1}[A-Za-z]{1})\\s?([0-9]{1}[A-Za-z]
{1}[0-9]{1})</pattern>
<pattern>(\\d{4})</pattern>
<pattern>(\\d{5})</pattern>
<pattern>(\\d{6})</pattern>
<pattern>(\\d{5})-?(\d{4})</pattern>
</patterns>
</constraints>
<presentation>
<patternrefs>
<patternref>\$1 \$2</patternref>
<patternref>\$1</patternref>
<patternref>\$1</patternref>
<patternref>\$1</patternref>
<patternref>\$1-\$2</patternref>
</patternrefs>
<casetype>upper</casetype>
</presentation>
</format>
<value></value>
</field>
Exceptions to this practice
There are no exceptions to this practice.