Python, Canadian Address RegEx validation

Question:

Im trying to write a Python script that validates Canadian Addresses using RegEx.

For example this address is valid:

 " 123 4th Street, Toronto, Ontario, M1A 1A1 "

But this one is not valid:

 " 56 Winding Way, Thunder Bay, Ontario, D56 4A3"

I have tried many different combinations keeping the rules of Canadian Postal codes such as the last 6 alphanumeric bits cannot contain the letters (D,F,I,O,Q,U,W,Z) but all entries seem to come out as invalid. and I tried
” (‘^[ABCEGHJKLMNPRSTVXY]{1}d{1}[A-Z]{1} *d{1}[A-Z]{1}d{1}$’) ” but still invalid

this is what I have so far

    import re


postalCode = " 123 4th Street, Toronto, Ontario, M1A 1A1 "

#read First Line
line = postalCode

#Validation Statement
test=re.compile('^d{1}[ABCEGHJKLMNPRSTVXY]{1}d{1}[A-Z]{1} *d{1}[A-Z]{1}d{1}$')


if test.match(line) is not None:
    print 'Match found - valid Canadian address: ', line
else:
    print 'Error - no match - invalid Canadian address:', line
Asked By: djangel321

||

Answers:

It’s been like this… forever:

/[A-Z][0-9][A-Z] ?[0-9][A-Z][0-9]/

If you want to restrict the first letter to only valid first letters then that’s fine, but the rest is too complex to vary from that very much.

[ABCEGHJKLMNPRSTVXY]d[A-Z] d[A-Z]d

Maybe it will work 😀

Canadian postal codes can’t contain the letters D, F, I, O, Q, or U, and cannot start with W or Z:

This will work for you:

import re

postalCode = " 123 4th Street, Toronto, Ontario, M1A 1A1 "
#read First Line
line = postalCode

if re.search("[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ] ?[0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]", line):
    print 'Match found - valid Canadian address: ', line
else:
    print 'Error - no match - invalid Canadian address:', line

WRONG - 56 Winding Way, Thunder Bay, Ontario, D56 4A3
CORRECT - 123 4th Street, Toronto, Ontario, M1A 1A1

Demo

https://ideone.com/OyVB9h

Answered By: Pedro Lobito
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.