brick / postcode Goto Github PK
View Code? Open in Web Editor NEWA PHP library to validate and format postcodes
License: MIT License
A PHP library to validate and format postcodes
License: MIT License
Hi! This looks like a really useful repo but your composer.json requires PHP v7.1, which is not the default version in Ubuntu Xenial (16-04). Any chance it works on PHP v7.0? That might increase the uptake if you could downgrade the composer requirement to PHP v7.0... Thanks.
The GB formatter currently validates and formats lots of invalid postcodes. The reason being is that only some characters are allowed in some positions.
I have a method that whilst still not 100% accurate is tried and tested over many years and millions of addresses
function verifyPostcode(&$postcode)
{
// Permitted letters depend upon their position in the postcode.
$alpha1 = '[abcdefghijklmnoprstuwyz]'; // Character 1
$alpha2 = '[abcdefghklmnopqrstuvwxy]'; // Character 2
$alpha3 = '[abcdefghjkstuw]'; // Character 3
$alpha4 = '[abehmnprvwxy]';
$alpha5 = '[abdefghjlnpqrstuwxyz]';
// Expression for postcodes: AN NAA, ANN NAA, AAN NAA, and AANN NAA
$pcexp[0] = '/^('.$alpha1.'{1}'.$alpha2.'{0,1}[0-9]{1,2})([0-9]{1}'.$alpha5.'{2})$/';
// Expression for postcodes: ANA NAA
$pcexp[1] = '/^('.$alpha1.'{1}[0-9]{1}'.$alpha3.'{1})([0-9]{1}'.$alpha5.'{2})$/';
// Expression for postcodes: AANA NAA
$pcexp[2] = '/^('.$alpha1.'{1}'.$alpha2.'[0-9]{1}'.$alpha4.')([0-9]{1}'.$alpha5.'{2})$/';
// Exception for the special postcode GIR 0AA
$pcexp[3] = '/^(gir)(0aa)$/';
// Load up the string to check, converting into lowercase and removing spaces
$postcode = strtolower($postcode);
$postcode = str_replace (' ', '', $postcode);
// Assume we are not going to find a valid postcode
$valid = false;
// Check the string against the six types of postcodes
foreach ($pcexp as $regexp) {
if (preg_match($regexp, $postcode, $matches)) {
$postcode = strtoupper ($matches[1] . ' ' . $matches [2]);
$valid = true;
break;
}
}
return $valid;
}
Would you be interested in me tidying this up as a new GB formatter? I think it can also be extended to check the district against a defined list to further remove any postcodes which technically use allowed characters in the first two positions but do not represent actual postcode areas. It's actually a fairly short list https://en.wikipedia.org/wiki/List_of_postcode_areas_in_the_United_Kingdom
postcode/src/PostcodeFormatter.php
Line 35 in 9fa8925
I've been running a parcel shipping service for the past 10 years which imports a millions of very badly formatted user provided addresses from eBay and other sources. In my experience, your previous solution of stripping anything other than 0-9A-Z is far more robust. People will provide their postal code using all kinds of characters as separators including "." and even "~" more often than you would imagine.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.