Type "LS29JT" and get an error because it does not like that you did not add the space "LS2 9JT"
Or even, type "LS2 9JT" and get an error because it does not like that you did add the space.
Type "LS29JT" and get an error because it does not like that you did not add the space "LS2 9JT"
Or even, type "LS2 9JT" and get an error because it does not like that you did add the space.
I'm not sure why. The Inward code is always Number-Letter-Letter. The outward code can be variable length and format. The space is certainly beneficial for visually parsing, but why W11AA isn't valid when W1 1AA is valid is confusing.
Sometimes you can feel that the code has been written by an engineer who is following the 'spec' to the letter instead of thinking of UX.
W111AA
One letter at a time, auto-inserting the space
W / W1 / W11 / W11 1 / W11 1A / W11 1AA
But for W1, you'd do
W / W1 / W11 / W1 1A / W1 1AA
Which would be jarring - you don't know when the inward code ends without typing a space, so you have to infer.
That said there's no reason not to allow [a-zA-Z0-9 ] and format after typing is finished (onBlur or even after submission).
(Poorly implemented address validation in the UK was behind the change in BFPO addresses 10 years ago -- https://fetchify.com/latest-news/lets-talk-about-bfpo-addres...)
Let the user type in the postcode and when they submit you can parse it as a whole maybe just in the backend, insert the space and display with the space from then on. Simple.
Letters received need only have the W1 part read, to see where they should be sent.
When they reach Westminster, the 1AA part is read to sort them for final delivery.
https://stackoverflow.com/questions/164979/regex-for-matchin...