Skip to content

Instantly share code, notes, and snippets.

@DuckThom
Created March 15, 2017 08:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DuckThom/df3e3cb4969ea76339c732256f15d3f9 to your computer and use it in GitHub Desktop.
Save DuckThom/df3e3cb4969ea76339c732256f15d3f9 to your computer and use it in GitHub Desktop.
Split the street from the housenumber with a regex
<?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;
}
}
<?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