[PHP] regexp werkt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 20-09 21:39

Kaastosti

Vrolijkheid alom!

Topicstarter
Ik weet het, dit is het zoveelste topic over een regexp die niet wil werken :X Ik heb vanalles geprobeerd en deze tutorial helemaal doorgebladerd... maar hij blijft dingen goedkeuren die fout zijn.

Wat ik wil is een string die alleen mag bestaan uit letters, cijfers en het - teken. Okee, makkelijk zat zou je denken, dus ik begin zo: (ik weet dat er afkortingen zijn, maar dit is voor mezelf duidelijker)

[0-9a-zA-Z-]*

Ik dacht dat dit zou betekenen dat de karakters waardes mogen hebben in de serie 0 t/m 9, a t/m z, A t/m Z of het karakter - mogen zijn en dat deze 0 of meer keren voor mogen komen in de string.

Helaas levert dit ook in het geval van bijvoorbeeld een string './/' gewoon 'goed' op. Ook andere probeersels leveren hetzelfde resultaat, terwijl ik volgens mij een goede aanroep doe van de functie:

eregi("[0-9a-zA-Z-]*", $string)

Voor andere tutorials (bijv. in NL) sta ik ook open, want ik vind 't best interessant :)

[ Voor 10% gewijzigd door Kaastosti op 02-02-2005 14:02 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • chrisO
  • Registratie: Mei 2003
  • Laatst online: 18-09 16:18
een typfoutje dat "A-z" ? of zou dat mischien de oorzaak zijn......moet dat niet A-Z zijn?

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 20-09 21:39

Kaastosti

Vrolijkheid alom!

Topicstarter
Hehe da's een tikfoutje idd, die staat goed... gecorrigeerd, sorry :)

[ Voor 29% gewijzigd door Kaastosti op 02-02-2005 14:02 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Je moet je logica omdraaien. Je kijkt nu of deze [0-9a-zA-z] tekens er in voorkomen. Maar dat klopt ook als er andere tekens in voorkomen. Je kan 'm dus beter herschrijven door te kijken of er een teken in voorkomt die daar niet aan voldoet (kun je omdraaien met de ^ binnen die []
Je kunt overigens beter de preg_match functie gebruiken. Die is sneller
http://nl3.php.net/preg_match
De usercomments zijn daar overigens vaak ook heel erg nuttig en kun je een hoop uithalen

[ Voor 15% gewijzigd door marty op 02-02-2005 14:03 ]


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 20-09 21:39

Kaastosti

Vrolijkheid alom!

Topicstarter
hmm ja, maar er mogen een heleboel karakters niet :)
Ik was begonnen met een test of ik in ieder geval een puntje er uit kon halen met
[^\.], maar dat ging ook niet helemaal goed werken. Maar dat idee zou er dan op neer komen dat ik ongeveer dit moet doen:
^[`~!@#$%\^&\*()\-=_\+\\[\]\\{}|;':",\./<>?]

[ Voor 5% gewijzigd door Kaastosti op 02-02-2005 14:07 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ik bedoel dus dit:
PHP:
1
2
3
4
if (preg_match("/[^0-9a-zA-Z]/", $string))
{
   echo "Er komt een teken in \$string voor die anders is dan [0-9a-z-A-Z]";
}


Door die ^ draai je 'm om en match dus op het tegenovergestelde van [0-9a-zA-Z]. En als ie daar ook daadwerkelijk op matched, dan weet je dus dat er een ongeldig teken in voorkomt

[ Voor 41% gewijzigd door marty op 02-02-2005 14:09 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

beetje raar om alle tekens die je niet wilt te gaan noteren terwijl het veel eenvoudiger is om alleen de tekens die je wilt op te geven 8)7

probeer dit eens:

eregi("^[0-9a-z]*$", $string)

^ matched het begin, en $ het eind van je string, en omdat je eregi gebruikt kijkt dat ding niet op of om van een hoofdlettertje :P

[ Voor 4% gewijzigd door Erkens op 02-02-2005 14:11 . Reden: hoofdletter i leek wel een L dus maar ff vet gemaakt :Y) ]


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 20-09 21:39

Kaastosti

Vrolijkheid alom!

Topicstarter
Holadijee het werkt :) Ik was inderdaad verkeerd naar het geheel aan het kijken. Bedankt voor de hulp...zijn er ook NL handleidingen voor regexp, want het is wel errug handig om de syntax te kennen :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Kaastosti schreef op woensdag 02 februari 2005 @ 14:13:
Holadijee het werkt :) Ik was inderdaad verkeerd naar het geheel aan het kijken. Bedankt voor de hulp...zijn er ook NL handleidingen voor regexp, want het is wel errug handig om de syntax te kennen :)
http://www.melp.nl/site/:content;tutorials;regex:

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:26

crisp

Devver

Pixelated

Ik heb toch een voorkeur voor PCRE:
PHP:
1
if (preg_match('/^[a-z0-9-]+$/i', $string)) echo 'matched';

[ Voor 6% gewijzigd door crisp op 02-02-2005 14:22 ]

Intentionally left blank

Pagina: 1