Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

postcode en reguliere expressies

Venzent
23 antwoorden
  • Na lang klooien met regexps, samen met het boek php4 zonder stress :evil: krijg ik email-, website-controles prima voor elkaar.

    Alleen postcode lukt niet. 1234AA wordt geaccepteerd maar 1234 AA niet.

    Dan maar "krijgen" van iemand anders :lol:
    Via php.net en phpfreakz.nl kwam ik aan de volgende expressie:
    [code:1:a0a778af54]
    ^[1-9][0-9]{3}\s?[a-zA-Z]{2}$
    [/code:1:a0a778af54]

    Op die site werd verteld dat hij 1234AA, 1234aa, 1234 AA, en 1234 aa zou accepteren.

    Ook hier weer wordt 1234 AA NIET geaccepteerd, de spatie moet wel kunnen mogen!

    Daarna ben ik gaan zoeken wat [code:1:a0a778af54]\s?[/code:1:a0a778af54] doet maar dat kan ik niet vinden.

    Ik gebruik (nu nog) ereg()

    wat gaat er fout?
  • http://www.regularexpressions.info/
  • \s? zegt eigenlijk, ÉÉN whitespace character (dus een linebreak (
    ), spatie, tab(\t) etc.) of GEEN. ?-teken geeft aan dat het voorafgaande teken 1 keer mag voorkomen, of helemaal niet. (En daarnaast is het nuttig om eens ff naar die site te gaan die Remytje gepost heeft, erg nuttig, behandelt zo'n beetje alles wat je moet weten, daarna komt het gepuzzel :D)

    Dus eigenlijk zou ie het wel moeten doen.

    Ik weet niet of het volgende werkt in Ereg maar het valt altijd te proberen (de preg_* functies zijn overigens sneller)

    ^[1-9][0-9]{3}(\s?)[a-zA-Z]{2}$
  • Anders haal je de spatie eerst zelf weg. Hoe? Moet je zelf uitzoeken, weet zelf niets van PHP.
  • [quote:2216c95b6f="MichielPH"]Anders haal je de spatie eerst zelf weg. Hoe? Moet je zelf uitzoeken, weet zelf niets van PHP.[/quote:2216c95b6f]

    str_replace(' ', '', $input);

    Maar of dat werkt is de vraag ;) Je zou het eigenlijk gewoon met de regular expression moeten kunnen doen :)
  • Nog beter: de maxlength van je postcode textfield op 6 zetten, dan heb je geen ruimte voor de spatie…
  • \d\d\d\d\s?\w\w
  • [quote:e7aba36fe8="Bill Gates"]Nog beter: de maxlength van je postcode textfield op 6 zetten, dan heb je geen ruimte voor de spatie…[/quote:e7aba36fe8]

    En daarnaast nog checken in PHP of de string lengte niet over de 6 heen gaat :
    if(strlen($postcode) > 6) {
    // postcode te lang
    }else{
    // correct, regular expression hier
    }

    Men kan namelijk extern een form gebruiken (exact hetzelfde form, behalve dat maxlength attribuut), en dan kun je die 6 charachter limit voorbij.
  • Het moet toch kunnen…

    Misschien ligt het aan mijn syntax?
    [code:1:ef6d4cc661]
    ?php

    $postcode ="1234 aa";

    if (ereg("^[1-9][0-9]{3}(\s?)[a-zA-Z]{2}$", $postcode))
    { echo $postcode;}

    ?>
    [/code:1:ef6d4cc661]

    Zodra ik 1234aa invul gaat het goed :cry:
  • [quote:e938849cc9="Bill Gates"]Nog beter: de maxlength van je postcode textfield op 6 zetten, dan heb je geen ruimte voor de spatie…[/quote:e938849cc9]

    Ik zou ze graag uniform in de database willen zetten.

    Allemaal MET een spatie, zodat het wat netter wordt met printen.

    ook de kleine letters bv aa, wil ik dan vervangen door AA.

    Als er geen spatie tussen staat voeg ik die later ook toe, ik wil alleen niet dat de gebruiker wordt lastiggevallen met geneuzel over een spatie..

    In het formulier staat de maxlength op 7

    [edit] verrek nu snap ik je bedoeling pas… :oops: :oops: , en dan een spatie zelf toevoegen …… hmm, maar het moet toch kunnen?? [/edit]
  • Probeer anders eens het volgende:

    <?php
    $postcode ="1234 aa";
    if(ereg("[1-9][0-9]{3}(\s?)[a-zA-Z]{2}", $postcode)) {
    echo $postcode;
    }
    ?>

    (De ^ en $ weggehaald)
  • helaas… :cry:
  • [quote:5b1ad04727="sander16v"]Na lang klooien met regexps, samen met het boek php4 zonder stress :evil: krijg ik email-, website-controles prima voor elkaar.
    [/quote:5b1ad04727]O hoe doen ze hetdaar dan? Ik heb lang zitten klooien hiermee en er werd altijd wel een adres niet ge-accepteerd terwijl die wel bestond.

    Tot dat ik op PHPreakz een script tegen kwam die het adres ontleed en ook het domein checked. Erg cool.
  • In ieder geval niet zo uitgebreid als wat jij nu beschrijft…

    puur een controle op letters en cijfers. Maar zonder spatie…

    Daar zit nu mijn probleem volgens mij
  • Gebruik preg_match en dan lukt het wel.
    [code:1:d4a664f3c8]
    preg_match("/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/", $postcode);[/code:1:d4a664f3c8]
  • inderdaad…

    Ik ga maar eens zoeken wat de syntaxverschillen zijn tussen ereg en preg_match….

    ik zag al een extra / staan

    Hartstikke bedankt! :lol: :lol:

    (kwaaltje van ereg??)
  • Gokje, ereg functions ondersteunen geen \d, \s, \w etc. :roll:
  • ik begin daar ook in te geloven…

    bij php.net kan ik er niets over vinden?!?
  • [quote:22084d5aab="sander16v"]bij php.net kan ik er niets over vinden?!?[/quote:22084d5aab]
    Het onderscheidt staat er toch echt in…

    ereg vs. preg
    POSIX Extended vs. Perl-Compatible

    Er staat zelfs een tip in de manual:
    [i:22084d5aab]PHP also supports regular expressions using a Perl-compatible syntax using the PCRE functions. Those functions support non-greedy matching, assertions, conditional subpatterns, and a number of other features not supported by the POSIX-extended regular expression syntax.[/i:22084d5aab]

    Het is niet de taak van de PHP-manual om Regular expressions uit te legen. Regular expressions is een aparte 'programmeertaal' om strings te doorzoeken, die in verschillende vormen ('dialecten') bestaat. De Regular expressions van Perl is één van de bekenste en wordt o.a. door PHP (middels de preg-functies) en .NET ondersteunt. Zie dan ook mijn link om de 'programmeertaal' te leren (de Perl-manier).

    Bij de preg-functies (in PHP) is het nodig dat het begint met een / en eindigt met een /. Waarom? Dat weet ik niet, maar waarschijnlijk heeft de PCRE-library (die gebruikt wordt door de preg-functies) dit nodig om het te kunnen verwerken.

    -Rémy
  • Zo had ik het niet begrepen…. :roll:

    Ik dacht dat je met die link mij wilde uitleggen hoe ik die expressies kon maken.

    En daarop dacht ik weer dat ik die expressies is elke functie kon gebruiken..

    Het is me inmiddels duidelijk geworden dat dit dus niet zo was.

    Weer wat geleerd….

    Bedankt! :D

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.