[PHP] ereg_replace probleempje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Thunk
  • Registratie: Maart 2002
  • Laatst online: 11-08 18:52
Hey, voor een $voornaam wil ik alleen de volgende karakters toestaan in een string:

a-z, A-Z, spatie en - (streepje)

De volgende functie werkt niet helemaal naar behoren:

PHP:
1
$voornaam = trim(ereg_replace("[^a-z,A-Z,-,[:space:]]","",$_POST['voornaam']));



a-z, A-Z, en spatie worden goed weergegeven.
Alleen haalt PHP nog altijd het streepje (-) weg uit mijn string.
Kan iemand me vertellen wat ik nog over het hoofd zie?

[ Voor 6% gewijzigd door Thunk op 01-02-2006 16:54 ]


Acties:
  • 0 Henk 'm!

  • arieleks
  • Registratie: September 2002
  • Laatst online: 13-08-2013
Had je al geprobeerd om een \ (backslash) voor dat streepje te zetten?

PHP:
1
$voornaam = trim(ereg_replace("[^a-z,A-Z,\-,[:space:]]","",$_POST['voornaam']));

[ Voor 41% gewijzigd door arieleks op 01-02-2006 16:57 ]

- Rietberg - sieben Mal sympatisch -

There are only 10 types of people, those who make stupid jokes about binary numbers and those who don't.


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Die komma's in je character class slaan nergens op; je class matcht nu ook komma's. Daarnaast vind ik een char class binnen een char class ook nogal raar overkomen, maar ik ben niet bekend met POSIX, dus misschien moet dat inderdaad wel zo. Wat jij doet zou ik persoonlijk zo aanpakken:
PHP:
1
$voornaam = preg_replace("/[^a-z\s-]/i","",$_POST['voornaam']);

Die trim slaat natuurlijk ook nergens op aangezien je regexp al ervoor zorgt dat er geen spaties meer in staan, dus ook niet aan het begin of einde van je string.

'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!

  • MrNGm
  • Registratie: Augustus 2004
  • Laatst online: 01-09 13:45
Volgens de Pattern Syntax in de PHP docs (weliswaar Perl-compatible regex) staat dat het streepje '-' een karakter reeks aanduidt. Probeer anders het volgende:

$voornaam = trim(ereg_replace("[^a-z,A-Z,\-,[:space:]]","",$_POST['voornaam']));

Misschien is het ook beter om Perl-compatible (dus preg_replace) regexen te gebruiken.

*ik zie nu dat een aantal mensen al sneller zijn :/

Acties:
  • 0 Henk 'm!

  • arieleks
  • Registratie: September 2002
  • Laatst online: 13-08-2013
offtopic:
Persoonlijk zou ik voor de tip van -NMe- gaan. Die werkt namelijk gewoon. Die van mij niet, maar dat komt omdat mijn hoofd is vervuild met VB6 en VBA. Tsja, 't is maar waar je je geld mee verdient...

- Rietberg - sieben Mal sympatisch -

There are only 10 types of people, those who make stupid jokes about binary numbers and those who don't.


Acties:
  • 0 Henk 'm!

  • Thunk
  • Registratie: Maart 2002
  • Laatst online: 11-08 18:52
Bedankt voor de reacties.. zat al de hele middag te prutsen met mogelijke werkende combinaties.
Een \ voor het streepje werkt ook niet (Warning: ereg_replace() [function.ereg-replace]: REG_ERANGE)

Maar, de oplossing van -NMe- werkt perfect.. thanks!

Acties:
  • 0 Henk 'm!

  • Thunk
  • Registratie: Maart 2002
  • Laatst online: 11-08 18:52
-NMe- schreef op woensdag 01 februari 2006 @ 16:57:Die trim slaat natuurlijk ook nergens op aangezien je regexp al ervoor zorgt dat er geen spaties meer in staan, dus ook niet aan het begin of einde van je string.
Die trim sloeg wel ergens op, want die verwijderde de spaties aan het begin en eind van de string.
De regexp die ik er op losliet, zorgde ervoor dat er WEL spaties BINNEN de string waren toegestaan (en dat werkte ook prima).

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Thunk schreef op woensdag 01 februari 2006 @ 17:26:
Die trim sloeg wel ergens op, want die verwijderde de spaties aan het begin en eind van de string.
De regexp die ik er op losliet, zorgde ervoor dat er WEL spaties BINNEN de string waren toegestaan (en dat werkte ook prima).
Ow? De regexp die je zelf postte zou, als je het streepje en de overbodige komma's even wegdenkt, het volgende doen:
"Jan Klaassen" -> "JanKlaassen"
"  Pietje" -> "Pietje"
"   " -> ""

Enz.

Zoals je die regexp hier postte heb je die trim simpelweg niet nodig. :)

'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!

  • Thunk
  • Registratie: Maart 2002
  • Laatst online: 11-08 18:52
-NMe- schreef op woensdag 01 februari 2006 @ 17:31:
[...]

Ow? De regexp die je zelf postte zou, als je het streepje en de overbodige komma's even wegdenkt, het volgende doen:
"Jan Klaassen" -> "JanKlaassen"
"  Pietje" -> "Pietje"
"   " -> ""

Enz.

Zoals je die regexp hier postte heb je die trim simpelweg niet nodig. :)
Volgens mij wel, want het volgende stukje
code:
1
"[^a-z,A-Z,-,[:space:]]"
Zorgt er voor dat alle expressies die er tussen de [ ] staan, WEL toegestaan zijn ( door ^ )... (dus a-z, A-Z, - (dat niet werkte), en spatie, de rest wordt weggefilterd)
Als je dan zonder trim zou werken, zouden er ook spaties voor en na de string worden doorgelaten.. en de trim haalt die juist weg (?!) :)

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Ow, inderdaad, je hebt gelijk... Ik kijk weer eens niet goed. :P

'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!

  • Thunk
  • Registratie: Maart 2002
  • Laatst online: 11-08 18:52
;-)
Thanks for the help tho _/-\o_
Pagina: 1