From b1614162749dc58792e666de42f4f9e257251906 Mon Sep 17 00:00:00 2001 From: Robert May Date: Tue, 1 Nov 2011 10:33:27 +0000 Subject: [PATCH 1/5] Adds BFPO support & tidies up regex list. --- lib/validates_as_uk_postcode.rb | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/validates_as_uk_postcode.rb b/lib/validates_as_uk_postcode.rb index 5513700..c60fb7c 100644 --- a/lib/validates_as_uk_postcode.rb +++ b/lib/validates_as_uk_postcode.rb @@ -1,13 +1,18 @@ module ValidatesAsUKPostcode module Postcodes UK = begin - an_naa_or_ann_naa = '^[A-PR-UWYZ]{1}\d{1,2}\s?\d[ABD-HJLNP-UWXYZ]{2}$' - aan_naa_or_aann_naa = '^[A-PR-UWYZ]{1}[A-HK-Y]{1}\d{1,2}\s?\d[ABD-HJLNP-UWXYZ]{2}$' - ana_naa = '^[A-PR-UWYZ]{1}\d[A-HJKSTUW]{1}\s?\d[ABD-HJLNP-UWXYZ]{2}$' - aana_naa = '^[A-PR-UWYZ]{1}[A-HK-Y]{1}\d[ABEHMNPRVWXY]{1}\s?\d[ABD-HJLNP-UWXYZ]{2}$' - historic_code="GIR\s?0AA" - postcode_spec = "#{an_naa_or_ann_naa}|#{aan_naa_or_aann_naa}|#{ana_naa}|#{aana_naa}|#{historic_code}" - pattern = /#{postcode_spec}/i + patterns = [ + '^[A-PR-UWYZ]{1}\d{1,2}\s?\d[ABD-HJLNP-UWXYZ]{2}$', # AN NAA or ANN NAA + '^[A-PR-UWYZ]{1}[A-HK-Y]{1}\d{1,2}\s?\d[ABD-HJLNP-UWXYZ]{2}$', # AAN NAA or AANN NAA + '^[A-PR-UWYZ]{1}\d[A-HJKSTUW]{1}\s?\d[ABD-HJLNP-UWXYZ]{2}$', # ANA NAA + '^[A-PR-UWYZ]{1}[A-HK-Y]{1}\d[ABEHMNPRVWXY]{1}\s?\d[ABD-HJLNP-UWXYZ]{2}$', # AANA NAA + '^(gir)(0aa)$', # GIR 0AA + '^(san)(ta1)$', # SAN TA1 + '^(bfpo)([0-9]{1,4})$', # BFPO (British Forces Post Office) + '^(bfpo)(c\/o[0-9]{1,3})$' # BFPO c/o + ] + + pattern = /#{patterns.join "|"}/i end end end From fa64a12648054ffa41e06fa0bbe1d8d7535590e5 Mon Sep 17 00:00:00 2001 From: Robert May Date: Tue, 1 Nov 2011 12:28:36 +0000 Subject: [PATCH 2/5] Tests for BFPO --- test/rails2/validates_as_uk_postcode_test.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/rails2/validates_as_uk_postcode_test.rb b/test/rails2/validates_as_uk_postcode_test.rb index d1be7ee..3efaefe 100644 --- a/test/rails2/validates_as_uk_postcode_test.rb +++ b/test/rails2/validates_as_uk_postcode_test.rb @@ -39,6 +39,8 @@ def test_invalid_postcodes 'EC1O 1BB', 'EC1Q 1BB', 'EC1S 1BB', 'EC1T 1BB', 'EC1U 1BB', 'EC1Z 1BB', 'EC1A 1IB', 'EC1A 1MB', 'EC1A 1OB', 'EC1A 1VB', 'EC1A 1BC', 'EC1A 1BI', 'EC1A 1BK', 'EC1A 1BM', 'EC1A 1BO', 'EC1A 1BV', + + 'BFPO 2789', 'BFPO c/o 2345' ] postcodes.each do |postcode| assert !AbstractModel.new(:postcode => postcode).valid?, "#{postcode} should be illegal." @@ -58,6 +60,8 @@ def test_valid_postcodes 'EC1A 1BB', 'BT9 7JL', 'GIR 0AA', + 'BFPO 772', + 'BFPO c/o 63' ] postcodes.each do |postcode| assert AbstractModel.new(:postcode => postcode).valid?, "#{postcode} should be legal." From b58e6e7167138c226fdceb05c977e0f9e94a973e Mon Sep 17 00:00:00 2001 From: Robert May Date: Tue, 1 Nov 2011 12:37:05 +0000 Subject: [PATCH 3/5] Switched to hash --- lib/validates_as_uk_postcode.rb | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/validates_as_uk_postcode.rb b/lib/validates_as_uk_postcode.rb index c60fb7c..b7ce249 100644 --- a/lib/validates_as_uk_postcode.rb +++ b/lib/validates_as_uk_postcode.rb @@ -1,18 +1,17 @@ module ValidatesAsUKPostcode module Postcodes - UK = begin - patterns = [ - '^[A-PR-UWYZ]{1}\d{1,2}\s?\d[ABD-HJLNP-UWXYZ]{2}$', # AN NAA or ANN NAA - '^[A-PR-UWYZ]{1}[A-HK-Y]{1}\d{1,2}\s?\d[ABD-HJLNP-UWXYZ]{2}$', # AAN NAA or AANN NAA - '^[A-PR-UWYZ]{1}\d[A-HJKSTUW]{1}\s?\d[ABD-HJLNP-UWXYZ]{2}$', # ANA NAA - '^[A-PR-UWYZ]{1}[A-HK-Y]{1}\d[ABEHMNPRVWXY]{1}\s?\d[ABD-HJLNP-UWXYZ]{2}$', # AANA NAA - '^(gir)(0aa)$', # GIR 0AA - '^(san)(ta1)$', # SAN TA1 - '^(bfpo)([0-9]{1,4})$', # BFPO (British Forces Post Office) - '^(bfpo)(c\/o[0-9]{1,3})$' # BFPO c/o - ] + UK = begin + patterns = { + :an_naa_or_ann_naa => '^[A-PR-UWYZ]{1}\d{1,2}\s?\d[ABD-HJLNP-UWXYZ]{2}$', + :aan_naa_or_aann_naa => '^[A-PR-UWYZ]{1}[A-HK-Y]{1}\d{1,2}\s?\d[ABD-HJLNP-UWXYZ]{2}$', + :ana_naa => '^[A-PR-UWYZ]{1}\d[A-HJKSTUW]{1}\s?\d[ABD-HJLNP-UWXYZ]{2}$', + :aana_naa => '^[A-PR-UWYZ]{1}[A-HK-Y]{1}\d[ABEHMNPRVWXY]{1}\s?\d[ABD-HJLNP-UWXYZ]{2}$', + :historic_code => '^(gir)(0aa)$', + :bfpo => '^(bfpo)([0-9]{1,4})$', + :bfpo_co => '^(bfpo)(c\/o[0-9]{1,3})$' + } - pattern = /#{patterns.join "|"}/i + pattern = /#{patterns.collect{|k,v| v}.join "|"}/i end end end From 8f17d45c1f42285a1053912ed41b0e88b84b5069 Mon Sep 17 00:00:00 2001 From: Robert May Date: Tue, 1 Nov 2011 12:38:30 +0000 Subject: [PATCH 4/5] Update lib/validates_as_uk_postcode.rb --- lib/validates_as_uk_postcode.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/validates_as_uk_postcode.rb b/lib/validates_as_uk_postcode.rb index b7ce249..3aba8cd 100644 --- a/lib/validates_as_uk_postcode.rb +++ b/lib/validates_as_uk_postcode.rb @@ -10,8 +10,8 @@ module Postcodes :bfpo => '^(bfpo)([0-9]{1,4})$', :bfpo_co => '^(bfpo)(c\/o[0-9]{1,3})$' } - - pattern = /#{patterns.collect{|k,v| v}.join "|"}/i + values = patterns.collect{|k,v| v} + pattern = /#{values.join "|"}/i end end end From 2b7790b61110f1ea3bd8a647e93ed39f899d90a0 Mon Sep 17 00:00:00 2001 From: Robert May Date: Tue, 1 Nov 2011 12:40:18 +0000 Subject: [PATCH 5/5] Update test/rails3/validates_as_uk_postcode_test.rb --- test/rails3/validates_as_uk_postcode_test.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/rails3/validates_as_uk_postcode_test.rb b/test/rails3/validates_as_uk_postcode_test.rb index d1be7ee..3efaefe 100644 --- a/test/rails3/validates_as_uk_postcode_test.rb +++ b/test/rails3/validates_as_uk_postcode_test.rb @@ -39,6 +39,8 @@ def test_invalid_postcodes 'EC1O 1BB', 'EC1Q 1BB', 'EC1S 1BB', 'EC1T 1BB', 'EC1U 1BB', 'EC1Z 1BB', 'EC1A 1IB', 'EC1A 1MB', 'EC1A 1OB', 'EC1A 1VB', 'EC1A 1BC', 'EC1A 1BI', 'EC1A 1BK', 'EC1A 1BM', 'EC1A 1BO', 'EC1A 1BV', + + 'BFPO 2789', 'BFPO c/o 2345' ] postcodes.each do |postcode| assert !AbstractModel.new(:postcode => postcode).valid?, "#{postcode} should be illegal." @@ -58,6 +60,8 @@ def test_valid_postcodes 'EC1A 1BB', 'BT9 7JL', 'GIR 0AA', + 'BFPO 772', + 'BFPO c/o 63' ] postcodes.each do |postcode| assert AbstractModel.new(:postcode => postcode).valid?, "#{postcode} should be legal."