I need to re-format a list of UK postcodes and have started with the following to strip whitespace and capitalize:
postcode.upcase.gsub(/\s/,'')
I now need to change the postcode so the new postcode will be in a format that will match the following regexp:
^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$
I would be grateful of any assistance.
If this standards doc is to be believed (and Wikipedia concurs), formatting a valid post code for output is straightforward: the last three characters are the second part, everything before is the first part!
So assuming you have a valid postcode, without any pre-embedded space, you just need
If you want to validate an input post code first, then the regex you gave looks like a good starting point. Perhaps something like this?
Note that I removed the ‘0-9’ part of the first character, which appears unnecessary according to the sources I quoted. I also changed the alpha sets to match the first-cited document. It’s still not perfect: a code of the format ‘AAA ANN’ validates, for example, and I think a more complex RE is probably required.
I think this might cover it (constructed in stages for easier fixing!)