[php]ereg matcht [ en ] character niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
elseif(!eregi("^[A-Za-z0-9_:;|=~!*()-]+$",$_POST['username1']))  echo "<span class=\"error\">Je username bevat ongeldige tekens!</span>\n";


Bovenstaande code gebruik ik om alleen die characters toe te staan in de usernames. Dit werkt perfect.
Nu wil ik alleen aan dat rijtje de volgende 2 toevoegen: [ ]
Maar die moeten natuurlijk geëscaped worden. Het volgende heb oa geprobeerd.

PHP:
1
elseif(!eregi("^[A-Za-z0-9_:;|=~!*()\\[\]-]+$",$_POST['username1']))  echo "<span class=\"error\">Je username bevat ongeldige tekens!</span>\n";


Met als gevolg dat hij nu bij elke username aangeeft dat er verkeerde characters in staan. Ik heb al gekeken op php.net maar niemand voert een ereg uit met die characters die ik graag toe wil staan.

Blijkbaar zie ik iets over 't hoofd. Weten jullie wat?

Alvast bedankt

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Probeer eens preg_match te gebruiken in plaats van eregi, zodat je PCRE gebruikt. Je regexp lijkt namelijk gewoon te kloppen. Raar trouwens dat je eregi (i == case Insensitivity) gebruikt, en vervolgens in je regexp nog steeds a-z en A-Z aangeeft. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Das inderdaad raar :) hehe ik begn op een gegeven moment gaan kutten en heb i d'r bij gebruikt.

Kheb nu preg_match gebruikt met dezelfde regexp en die werkt wel. Vreemd maar schijnbaar is preg_match ook sneller dus gebruik ik die voortaan :)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Om in de string die naar de regexp engine wordt gestuurd daadwerkelijk een \ te krijgen zul je die wel moeten escapen. Het werkt waarschijnlijk beter wanneer je \\\[ en \\] gebruikt ipv \\[ en \]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Nee, POSIX negeert de backslash binnen een bracket expression.
Verder zie de manpage:
To include a literal `]' in the list, make it the first character (fol-
lowing a possible `^'). To include a literal `-', make it the first or
last character, or the second endpoint of a range.
Dit werkt dus:
PHP:
1
if(!eregi('^[][A-Za-z0-9_:;|=~!*()-]+$', $_POST['username1'])) echo "<span class=\"error\">Je username bevat ongeldige tekens!</span>\n";


Maar verder sluit ik me bij de rest aan: je kan beter de PCRE syntax en bijbehorende functies gebruiken.

Intentionally left blank