anoniem Geplaatst: 7 september 2004 Delen Geplaatst: 7 september 2004 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? Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 [url]http://www.regularexpressions.info/[/url] Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 \s? zegt eigenlijk, ÉÉN whitespace character (dus een linebreak (\n), 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}$ Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 Anders haal je de spatie eerst zelf weg. Hoe? Moet je zelf uitzoeken, weet zelf niets van PHP. Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 [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 :) Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 Nog beter: de maxlength van je postcode textfield op 6 zetten, dan heb je geen ruimte voor de spatie... Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 \d\d\d\d\s?\w\w Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 [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. Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 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 Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 [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] Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 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) Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 helaas... :cry: Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 [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. Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 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 Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 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] Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 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??) Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 Gokje, ereg functions ondersteunen geen \d, \s, \w etc. :roll: Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 ik begin daar ook in te geloven... bij php.net kan ik er niets over vinden?!? Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 [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 Quote Link naar reactie
anoniem Geplaatst: 7 september 2004 Auteur Delen Geplaatst: 7 september 2004 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 Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen