Postcode check/regulator

Door Joran den Houting, 13 jaar geleden, 27.345x bekeken

modedit:
De verbeterde versie van dit script is "Postcode check/regulator V2"

Een simpele functie voor het controleren van een Nederlandse postcode en deze altijd wegschrijven in hetzelfde format.

De functie is op zich zeer simpel, maar snel en effectief.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

function PostcodeCheck($postcode)
{

    $remove = str_replace(" ","", $postcode);
    $upper = strtoupper($remove);

    if( preg_match("/^\W*[1-9]{1}[0-9]{3}\W*[a-zA-Z]{2}\W*$/",  $upper)) {
        return $upper;
    }
else {
        return false;
    }
}

?>


Deze stuurt de postcode in 1standaard formaat terug, sted dat de input dus "1111 aa" is, zul je als return altijd "1111AA" ontvangen. Wanneer de postcode niet geldig is dan zul je een false als return ontvangen.

De controle op deze functie kan bijvoorbeeld op deze manier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

if( PostcodeCheck($postcode) !== false ) {
    echo "Geldige postcode: " . PostcodeCheck($postcode);
}
else {
    echo "Ongeldige postcode.";
}


?>


Wel moet $postcode even gedefineerd worden aan het begin, dit kun je uiteraard zelf doen. Ik heb in mijn voorbeeld script de $_GET functie gebruikt om dit script makkelijk testbaar te maken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$postcode = $_GET['postcode'];

Gesponsorde koppelingen

PHP script bestanden

  1. postcode_check.php

 

Er zijn 4 reacties op 'Postcode checkregulator'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Joran den Houting
Joran den Houting
13 jaar geleden
 
0 +1 -0 -1
Ik zit nog altijd in over de str_replace... Iemand een beter voorstel? Zit zelf te denken aan het verwijderen van alle spaces met preg_replace:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
preg_replace('/\s+/', '', $string);


Alvast bedankt!
Joran den Houting
Joran den Houting
13 jaar geleden
 
0 +1 -0 -1
Het is uiteraard ook mogelijk om de functie uit te voeren in een verkorte check:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

echo (PostcodeCheck($postcode) !== false ? "Geldige postcode: " . PostcodeCheck($postcode) : "Ongeldige postcode.");

?>
Willem vp
Willem vp
13 jaar geleden
 
0 +1 -0 -1
Ik snap het gebruik van de \W* in de reguliere expressie niet zo goed. Daardoor wordt invoer als @1234!ab* ook goedgekeurd.

Zelf zou ik in dit geval aan het begin en eind \b gebruiken en in het midden \s* zodat je iets als dit krijgt:

/^\b[1-9]\d{3}\s*[A-Z]{2}\b$/

Bovendien hoef je a-z niet in de regex mee te nemen, omdat je de string al naar uppercase hebt geconverteerd. ;-)

Het stukje voorbeeldaanroep (en de verkorte code) is overigens ook niet echt sjiek, omdat je de checkfunctie twee keer aanroept. Beter kun je de return value van je functie eerst toekennen aan een variabele:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
if( ($geldigePostcode = PostcodeCheck($postcode)) !== false ) {
    echo "Geldige postcode: $geldigePostcode";
} else {
    echo "Ongeldige postcode.";
}
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Joran den Houting
Joran den Houting
13 jaar geleden
 
0 +1 -0 -1
Hallo Willem,

Dank voor je reactie en dank voor de correctie op mijn RegEX! Zeker een goed verbeterpunt in de functie. Het maken van een variable uit het resultaat van de funtie is inderdaad ook een goede toevoeging, was ik niet direct op gekomen.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. postcode_check.php

Labels

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.