[PHP] Regular Expression - Alleen tekst

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Ok, een simpele reg. exp. voor email is me nog net gelukt, maar nu ben ik al uren aan het zoeken en het is me nog steeds niet gelukt. Voor velen is deze vraag waarschijnlijk (te) makkelijk, maar ik blijf echt aan het zoeken en kan geen goed begin vinden.

Ik wil een reg exp creeren om te controleren of eens string wel volledig uit cijfers en letters bestaat. Moet niet zo moeilijk zijn toch? Alleen krijg ik het steeds zo voor mekaar, dat het niets uitmaakt wanneer ik er een raar teken achter hang, want dan matched de reg. exp. nog gewoon het eerste gedeelte van de string wat wel geldig is.

Dus het moet een reg exp worden die uitsluitend geldig is, wanneer de string volledig uit tekst of cijfers bestaat.

zelf kwam ik op zoiets
PHP:
1
2
if (preg_match("/^([a-zA-Z0-9])[a-zA-Z0-9]*$([a-zA-Z0-9])/i", $subject))
{}


:?

edit:
gezocht, gegoogled, gekloot, geUTFSed .. heel veel informatie, beetje te veel, ik kan dit (simpele?) er niet tussen vinden

[ Voor 9% gewijzigd door r0bert op 20-04-2004 19:15 ]


Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Als je alleen letters en cijfers bedoeld is het vrij simpel:

PHP:
1
if(preg_match("^[a-zA-Z0-9]+$", $string))

[ Voor 33% gewijzigd door MarkvE op 20-04-2004 19:29 . Reden: Haakjes mochten weg... ]

Vormkracht10


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Kun je me nu ook uitleggen hoe die reg exp dan in elkaar zit?

^geeft aan dat het moet beginnen met (hoofd/kleine)letters en cijfers..
die + is voor 1 of meer tekens (toch?)
en die dollar-sign dan? da's iets als "tot en met het einde"?

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Waarom zo moeilijk? Waarom gebruik je subpatterns? Waarom de $ op die plek?

edit:
r0bert schreef op 20 april 2004 @ 19:23:
Kun je me nu ook uitleggen hoe die reg exp dan in elkaar zit?

^geeft aan dat het moet beginnen met (hoofd/kleine)letters en cijfers..
die + is voor 1 of meer tekens (toch?)
en die dollar-sign dan? da's iets als "tot en met het einde"?
Begin hier maar: http://gerard.yoursite.nl/got/regex-tut/ .. :)

edit 2:

MarkvE: ik doelde op de $ op die plek in de regexp van de TS. :)

[ Voor 84% gewijzigd door RedRose op 20-04-2004 19:29 ]

Sundown Circus


Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
^
Begint met... (het volgende wat je dus in je regex zet)

$
Eindigt met... (het voorafgaande wat je in je regex hebt gezet)

+
Eén of meer karakters (het voorafgaande wat je in de regex hebt gezet)

edit:
@RedRose

Sorry, had ik niet in de gaten ;)

[ Voor 42% gewijzigd door MarkvE op 20-04-2004 19:32 ]

Vormkracht10


Acties:
  • 0 Henk 'm!

Verwijderd

Tip: doe regular expressions altijd tussen enkele quotes, dat scheelt heel wat escapen.

En bij een perl-compatible regular expression (de preg_* functies) moet je natuurlijk wel delimiters gebruiken. In he bovenstaande voorbeeld wordt het dan:
PHP:
1
2
3
if ( preg_match ( '/^[a-zA-Z0-9]+$/', $subject ) ) {
   ...
}

Zoals je ziet gebruik ik ook geen pattern modifiers. Als je de i pattern modifier zou gebruiken, dan zou je /^[a-z0-9]+$/i krijgen.

Acties:
  • 0 Henk 'm!

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 09:51
Waarom naar 'n regexp grijpen als het ook veel makkelijker kan?
PHP:
1
2
3
4
if (ctype_alnum($subject))
{
  ...
}

Lijkt me ook nog eens veel duidelijker, niet?

[ Voor 20% gewijzigd door Limhes op 20-04-2004 20:15 ]


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Ja, maar omdat er nog meer form-velden gevalideerd moeten worden (met andere eisen) is het makkelijker om deze allemaal via reg expen te valideren ipv allerlei functies ;) Maar op zich ook een goede oplossing idd..
Pagina: 1