The below script takes the input of a UK postcode and ensures that it matches a valid format. I have handled the below formats:
- X11XX
- XX11XX
- XX111XX
To do this, I use some regular expressions. Let’s look at one: “^[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{2}”. Here:
- The beginning of the string (denoted with a ^) needs to be a letter. We need {1} occurence (i,.e. one letter).
- The next chunk needs to be numeric and there needs to be {2} of them.
- Finally, we require more letters, again, {2} occurences.
If the input value matches that pattern, we print ‘Matched!’.
import re
def validate_postcode(pc):
pattern = 'not matched'
#e.g. W27XX
if len(pc.replace(" ", "")) == 5:
pattern = re.compile("^[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{2}")
#e.g. TW27XX
elif len(pc.replace(" ", "")) == 6:
pattern = re.compile("^[a-zA-Z]{2}[0-9]{2}[a-zA-Z]{2}")
#e.g. TW218FF
elif len(pc.replace(" ", "")) == 7:
pattern = re.compile("^[a-zA-Z]{2}[0-9]{3}[a-zA-Z]{2}")
if pattern != 'not matched':
if pattern.match(pc):
print('Matched!')
else:
print(pattern)
validate_postcode('XX29KK')