diff --git a/lib/locales/en-GB.yml b/lib/locales/en-GB.yml index b8aa870dc0..c6ec2242b6 100644 --- a/lib/locales/en-GB.yml +++ b/lib/locales/en-GB.yml @@ -1,7 +1,13 @@ en-GB: faker: address: - postcode: "/[A-PR-UWYZ]([A-HK-Y][0-9][ABEHMNPRVWXY0-9]?|[0-9][ABCDEFGHJKPSTUW0-9]?) [0-9][ABD-HJLNP-UW-Z]{2}/" + postcode: + - "/[A-PR-UWYZ][0-9] [0-9][ABD-HJLNP-UW-Z]{2}/" # AN NAA (e.g. M1 1AA) + - "/[A-PR-UWYZ][0-9]{2} [0-9][ABD-HJLNP-UW-Z]{2}/" # ANN NAA (e.g. M60 1NW) + - "/[A-PR-UWYZ][A-HK-Y][0-9] [0-9][ABD-HJLNP-UW-Z]{2}/" # AAN NAA (e.g. CR2 6XH) + - "/[A-PR-UWYZ][A-HK-Y][0-9]{2} [0-9][ABD-HJLNP-UW-Z]{2}/" # AANN NAA (e.g. DN55 1PT) + - "/[A-PR-UWYZ][0-9][ABCDEFGHJKPSTUW] [0-9][ABD-HJLNP-UW-Z]{2}/" # ANA NAA (e.g. W1A 1HQ) + - "/[A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY] [0-9][ABD-HJLNP-UW-Z]{2}/" # AANA NAA (e.g. EC1A 1BB) county: - Avon - Bedfordshire diff --git a/test/test_en_gb_locale.rb b/test/test_en_gb_locale.rb index 8a921b0c86..907b1df5ca 100644 --- a/test/test_en_gb_locale.rb +++ b/test/test_en_gb_locale.rb @@ -54,6 +54,23 @@ def test_en_gb_postcode_has_outcode_and_incode assert_equal 2, postcode.split.length end + POSTCODE_FORMATS = Regexp.union( + /\A[A-PR-UWYZ][0-9] [0-9][ABD-HJLNP-UW-Z]{2}\z/, # AN NAA + /\A[A-PR-UWYZ][0-9]{2} [0-9][ABD-HJLNP-UW-Z]{2}\z/, # ANN NAA + /\A[A-PR-UWYZ][A-HK-Y][0-9] [0-9][ABD-HJLNP-UW-Z]{2}\z/, # AAN NAA + /\A[A-PR-UWYZ][A-HK-Y][0-9]{2} [0-9][ABD-HJLNP-UW-Z]{2}\z/, # AANN NAA + /\A[A-PR-UWYZ][0-9][ABCDEFGHJKPSTUW] [0-9][ABD-HJLNP-UW-Z]{2}\z/, # ANA NAA + /\A[A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY] [0-9][ABD-HJLNP-UW-Z]{2}\z/ # AANA NAA + ) + + def test_en_gb_postcode_always_matches_a_valid_format + 100.times do + postcode = Faker::Address.postcode + + assert_match POSTCODE_FORMATS, postcode, "#{postcode.inspect} is not a valid UK postcode format" + end + end + def test_en_gb_postcode_incode_is_valid # The letters C I K M O V are not used in the second part of the Postcode. incode = Faker::Address.postcode.split[1]