Created
March 15, 2017 08:57
-
-
Save DuckThom/df3e3cb4969ea76339c732256f15d3f9 to your computer and use it in GitHub Desktop.
Split the street from the housenumber with a regex
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Luna\Splitter; | |
class Splitter | |
{ | |
/** | |
* Split the street from the number | |
* | |
* @param string $address | |
* @return array | |
*/ | |
public static function splitAddress($address) | |
{ | |
preg_match('/^(?P<address>\d*\D+[^A-Z]) (?P<number>[^a-z]?\D*\d+.*)$/', $address, $match); | |
return $match; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Tests; | |
use Luna\Splitter\Splitter; | |
class TestCase extends \Phpunit\Framework\TestCase | |
{ | |
/** | |
* @test | |
*/ | |
public function addressesAreSplitCorrectly() | |
{ | |
$testAddresses = [ | |
'Street 12' => [ | |
'address' => 'Street', | |
'number' => '12' | |
], | |
'Street 12A' => [ | |
'address' => 'Street', | |
'number' => '12A' | |
], | |
'Street 12 A' => [ | |
'address' => 'Street', | |
'number' => '12 A' | |
], | |
'Street A12' => [ | |
'address' => 'Street', | |
'number' => 'A12' | |
], | |
'Street A 12' => [ | |
'address' => 'Street', | |
'number' => 'A 12' | |
], | |
'Street A12 A14' => [ | |
'address' => 'Street', | |
'number' => 'A12 A14' | |
], | |
'Street 12 - 14' => [ | |
'address' => 'Street', | |
'number' => '12 - 14' | |
], | |
'Street A12 - A14' => [ | |
'address' => 'Street', | |
'number' => 'A12 - A14' | |
], | |
'Street A 12 - A 14' => [ | |
'address' => 'Street', | |
'number' => 'A 12 - A 14' | |
], | |
'Street 12A - 14A' => [ | |
'address' => 'Street', | |
'number' => '12A - 14A' | |
], | |
'Street 12 A - 14 A' => [ | |
'address' => 'Street', | |
'number' => '12 A - 14 A' | |
], | |
'Some long street name 12 34' => [ | |
'address' => 'Some long street name', | |
'number' => '12 34' | |
], | |
'Some long street name 12 - 34' => [ | |
'address' => 'Some long street name', | |
'number' => '12 - 34' | |
], | |
'Some long street name A12 - A34' => [ | |
'address' => 'Some long street name', | |
'number' => 'A12 - A34' | |
], | |
'Some long street name 12A' => [ | |
'address' => 'Some long street name', | |
'number' => '12A' | |
] | |
]; | |
foreach ($testAddresses as $fullAddress => $splitAddress) { | |
$address = Splitter::splitAddress($fullAddress); | |
$this->assertEquals($splitAddress['address'], $address['address']); | |
$this->assertEquals($splitAddress['number'], $address['number']); | |
$address = Splitter::splitAddress('1st ' . $fullAddress); | |
$this->assertEquals('1st ' . $splitAddress['address'], $address['address']); | |
$this->assertEquals($splitAddress['number'], $address['number']); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment