in reply to Testing whether a value is in a range.

I really think that you're going to have to come up with a regex for each country -- some of them could be re-used, but that weirdness of UK postcodes is going to force you to develop your own system for them.

You could, for example, have a hash of regexes, and use the first column as the key. $regexes{'GB'} would be the one that dealt with your SW1 example, and it would be something like /\w+(\d+)(\w)?\s\w+(\d+)/ and test the values in $1 and $3.

But in fact, come to think of it, you'd need at least two for the UK because as you can see, London postcodes have a different format to ones outside London.

I wonder whether the UK postal authorities have some kind of database or flat-text file you could grab and munge.
--

“Every bit of code is either naturally related to the problem at hand, or else it's an accidental side effect of the fact that you happened to solve the problem using a digital computer.”
M-J D

Replies are listed 'Best First'.
Re^2: Testing whether a value is in a range.
by adrianh (Chancellor) on Mar 10, 2003 at 22:29 UTC
    I wonder whether the UK postal authorities have some kind of database or flat-text file you could grab and munge.

    There are lots of details here but most of it costs $$$.

      What a pain.

      Anyway, the UK postal system, alphanumeric and variable as it is, is only one problem. I'm betting that its the most problematic of postcode systems though. The US and Australia have numeric-only systems, and Canada, I believe has a version of the UK system but without the London anomalies (there's SW, and NW, but no NE, just N, that kind of thing).

      It may be, however, that the problem is understimating the pinpoint accuracy of the UK system, where a postcode can be as accurate as one half of one side of a street.

      In the example of "SW1 <=> SW24" I'm betting that there is no such thing as SW25 or over, so the problem really can be solved as easily as "SW\d+ maps to LHR", without worrying about the numbers.

      Other UK postcodes just simply relate to towns. If you have one beginning BN? That's the town of Brighton, and the nearby airport is Gatwick. You wouldn't have to sweat the BN1, BN2 .. BN35 stuff.
      --

      “Every bit of code is either naturally related to the problem at hand, or else it's an accidental side effect of the fact that you happened to solve the problem using a digital computer.”
      M-J D