[REGEX/ PHP] form validatie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
hallo,

Ik wil graag een groot deel van mijn forminput met regex valideren.
Maar kom nog niet zo goed uit de regex.
Dus ik heb 3 vragen:

1. Hoe leer ik de reguliere expressie voor PHP, vind op het net nogal
weinig wat echt helder alles uitlegd.
2. Is reqgex het aangewezen middel om alle forminput te valideren?

3. Ik wil een string controleren op:

alleen de tekenreeks [a-z0-9] verder geen enkel teken toegestaan
daarnaast mag de string max "y" lang zijn en min "x" lang.

Ik kom er maar niet uit met de dingen die ik geporbeerd heb als

ereg(^.[a-z0-9]{x,y})
ereg([a-z0-9]{x,y})
ereg([^z-a0-9]{x,y})
etc.

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

http://www.regexlib.com/

Bekijk hier ook de Cheat Sheet

[ Voor 4% gewijzigd door RwD op 10-08-2004 18:47 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:52

crisp

Devver

Pixelated

code:
1
2
3
4
5
6
7
/              begin regexp
^              vanaf begin string
[a-z0-9]       match a-z of 0-9
{x,y}          minimaal x, maximaal y maal
$              tot aan einde string
/              einde regexp
i              case-insensitive

[ Voor 4% gewijzigd door crisp op 02-08-2004 12:46 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:52

crisp

Devver

Pixelated

. 8)7
offtopic:
quote ipv edit


anyway, ik vind de beschrijving op PHP.net over PCRE (wat mijn voorkeur geniet boven POSIX) helemaal niet slecht: http://www.php.net/manual/en/ref.pcre.php

[ Voor 92% gewijzigd door crisp op 02-08-2004 12:47 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Om makkelijk je regex'en te kunnen checken kan je The Regex Coach gebruiken. Hier al vaker langsgekomen, maar verdomd handig!

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20-09 18:51
[b][message=21342540,noline]Zoolander schreef op 02 augustus 2004 @
1. Hoe leer ik de reguliere expressie voor PHP, vind op het net nogal
weinig wat echt helder alles uitlegd.
We hebben genoeg informatie en referenties in de P&W FAQ staan:
P&W FAQ - Regular expressions
Moet je wel een beetje moeite voor doen, natuurlijk.
2. Is reqex het aangewezen middel om alle forminput te valideren?
Niet altijd. Een voordeel van een Perl-compatible regular expression is dat je 'm zowel in PHP als in JavaScript kan gebruiken en dus client- en serverside dezelfde validatie kunt toepassen.

Helaas kunnen sommige validaties ontzettend ingewikkeld worden als je ze met alleen reguliere expressies wil uitvoeren. Ik kies er vaak voor om reguliere expressies te combineren met PHP string processing functies als split/explode. Dat levert naar mijn mening de meest leesbare code op. Leesbaarheid is sowieso een groot probleem met reguliere expressies: het is vrij lastig om te zien wat een reguliere expressie precies doet.
3. Ik wil een string controleren op:
alleen de tekenreeks [a-z0-9] verder geen enkel teken toegestaan
daarnaast mag de string max "y" lang zijn en min "x" lang.
Ik kom er maar niet uit met de dingen die ik geprobeerd heb
Voor reguliere expressies geldt nog meer dan voor gewoon programmeren: eerst denken, dan doen. Zomaar dingen uitproberen zonder je bewust te zijn van wat je doet werkt meestal niet. Als je niet kunt bedenken waarom een reguliere expressie niet doet wat je wil, kun je waarschijnlijk ook geen reguliere expressie construeren die wel doet wat je wilt.

Acties:
  • 0 Henk 'm!

Verwijderd

Een paar reacties: lees de pagina Pattern Syntax eens rustig door, bij de link die crisp gegeven heeft. Daarna lees je Pattern Modifiers. Daarna lees je Pattern Syntax nog eens. Dan begin je je expressie te schrijven, met Pattern Syntax ernaast ;).

@crisp: ik gebruik eigenlijk altijd de pipe (|) om mijn REs te beginnen en te sluiten. Pipes komen in mijn expressies een stuk minder vaak voor dan slashes, en zo hoef je die niet elke keer te escapen.

En in het algemeen: gebruik de modifier "x" (eXtended syntax)! Met die modifier kun je witruimte opnemen in je RE zonder dat dat de werking ervan beïnvloedt, en je maakt je RE een stuk overzichtelijker (en minder foutgevoelig), als je logische stukken van elkaar scheidt met spaties.

[ Voor 5% gewijzigd door Verwijderd op 02-08-2004 15:53 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:52

crisp

Devver

Pixelated

@OneOfBorg: in javascript worden de forward slashes gebruikt als shorthand constructor, ik gebruik ze daarom altijd als delimiter zodat ik rustig een regexp van PHP naar JS en vice versa kan kopieren ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Bedankt voor alle tips,
maar ik snap nog niet wat ik verkeerd doe.

door
code:
1
ereg('[a-z]{3,5}', $bla)


te gebruiken, geeft hij bij $bla ="aa" aan dat het invalid is
en bij $bla = "aaa" netjes dat die wel valid is.
maar bij $bla = "aaaaaa" Ook dat hij valid is. Wat doe ik dan fout?
Je kan in PHP bij regex toch aangeven tussen welke waarde de lengte van je string mag zijn? :?

trouwens, een letterlijk voorbeeld ereg("a{3,5}") werkt ook al niet.... :(
snap er niks van

[ Voor 17% gewijzigd door Zoolander op 03-08-2004 11:32 ]

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

Verwijderd

6 a's zijn ook valid, omdat er op zijn minst 3 tot 5 inzitten.

Het probleem zit 'm erin dat hij naar substrings zoekt, en de string "aaaaaa" bevat als substring de string waar je naar zoekt.

Wat je nog moet doen is aangeven dat er tussen begin en eind van de string ALLEEN 3 tot 5 a's mogen zitten.

Hoe dat er in POSIX syntax uitziet weet ik niet, maar in Perl syntax als volgt:

code:
1
^[a-z]{3,5}$


NB: Voor Perl-syntax moet je de preg_* functies gebruiken. Let ook op dat in de RE die ik hierboven gegevens heb, geen begin- en eindtekens opgenomen zijn. Je moet de RE dus nog omsluiten met slashes, of wat je wilt gebruiken, voordat je hem in een functie kan proppen.

[ Voor 26% gewijzigd door Verwijderd op 03-08-2004 14:13 ]


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
nu begint het helder te worden die REGEX, ik vind de PCRE dan ook bij deze fijner dan de POSIX.... :D

hij werkt nu idd met de ^ & $ met preg_match.
Dank voor de input!

mijn naam slaat nergens op, althans niet op mij :P

Pagina: 1