[PHP] pregmatch probleem

Pagina: 1
Acties:
  • 639 views

Acties:
  • 0 Henk 'm!

  • GiantLeap
  • Registratie: Oktober 2005
  • Laatst online: 19-09 11:59

GiantLeap

One GiantLeap for mankind

Topicstarter
Ik ben vandaag aan de slag gegaan met met de tutorial voor het OOP User System (klik)

Ik heb alles stap voor stap opgevolgd, maar nu komt PHP met de volgende melding:
'Warning on line 130,
preg_match() [function.preg-match]: Unknown modifier '0', in /home/[DOMEIN]/public_html/classes/user.php'
Dit is het stukje code waar het om gaat:

code:
1
2
3
4
                           $_name = "/^[-!#$%&’*+./0-9=?A-Z^_`{|}~]+";
                            $_host = "([-0-9A-Z]+.)+";
                            $_tlds = "([0-9A-Z]){2,4}$/i";
                            if( preg_match( $_name ."@". $_host . $_tlds, $email ) ){


Dit is line 130:

code:
1
if( preg_match( $_name ."@". $_host . $_tlds, $email ) ){


Ik ben dus opzoek gegaan naar een mogelijke oplossing en kwam toen hier uit.

Helaas wordt men hier aangeraden om contact op te nemen met een persoon via msn, na contact te hebben gehad via PM en staat er dus geen concrete oplossing als antwoord. Maar aangezien deze gebruiker al maanden niet meer online is geweest, verwacht ik niet echt een snelle response op mijn PM....

Kan iemand mij helpen met het oplossen van dit probleem?

Mario Kart Tour: 211982902522
Rockstar Games Social Club (PC): GiantLeap

RC spul:
Traxxas Nitro Rustler
Hubsan X4 H107D
DJI Phantom 2 Vision+


Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Probeer de regex uit in een online tester, bijvoorbeeld: http://quanetic.com/Regex

Wat ik zo snel kan zien, moet er een backslash (\) voor de '/0' in $_name

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • GiantLeap
  • Registratie: Oktober 2005
  • Laatst online: 19-09 11:59

GiantLeap

One GiantLeap for mankind

Topicstarter
Je hebt gelijk, er moest inderdaad een backslash voor '/0'. Bedankt voor je snelle reactie!

Mario Kart Tour: 211982902522
Rockstar Games Social Club (PC): GiantLeap

RC spul:
Traxxas Nitro Rustler
Hubsan X4 H107D
DJI Phantom 2 Vision+


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Je pattern voor een TLD is onjuist. Deze bestaan niet uit 2-4 tekens, maar ook langere TLD's zijn mogelijk. Bijvoorbeeld: http://abasuba.museum/ of http://egypt.travel/

[ Voor 7% gewijzigd door HuHu op 10-05-2009 18:28 ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

//You won't be able to see it due to security reasons on p2l, but there is a backward slash (opposite to the / slash) before the second forward slash (Before the 0-9) and in front of the period ( . ) - this must be added in manually otherwise you will receive an error.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 07-09 13:37
PHP heeft al ingebouwde regex voor email validatie:
http://nl2.php.net/manual/en/filter.examples.validation.php

Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 19-09 21:26

DataGhost

iPL dev

Misschien moet je eens een kijkje nemen op http://www.regular-expressions.info/email.html. De regex die je nu hebt slaat namelijk nergens op. Als ik bijvoorbeeld "-@-:00" invoer zal hij dit zien als een geldig mailadres. Ik zou als ik jou was die pagina nog even grondig doorlezen en daarna opnieuw overwegen of je een reguliere expressie wilt gebruiken om een mailadres te valideren.
Verder zou je kunnen kijken naar andere manieren om te valideren. Je kan vrij snel zien of het gedeelte na de @ geldig is door met een simpele (!) reguliere expressie te kijken of het een IP is of een domeinnaam met tenminste twee segmenten (bla.bla). Enkele hostnames zullen toch niet bereikbaar zijn vanaf je server dus daar hoef je niet op te checken. Als je de domeinnaam hebt kan je kijken of je deze kan resolven. Daar zou ik persoonlijk stoppen.

Ik vind eigenlijk dat dit meer het probleem is van de user. Mailadres-validatie kan je namelijk perfect doen door ze een mailtje te sturen met een unieke code (ik gok dat je dit doet na het valideren door middel van de regex?) en ik zou daarom simpelweg checken op een apenstaartje en een punt na het apenstaartje. Als het mailadres hieraan voldoet is de kans groot dat hij geldig is. Als het adres toch niet geldig blijkt is dit alleen maar het probleem van de user, hij kan je site niet gebruiken.

Sowieso zou ik de begin- en einddelimiters en de modifiers niet in je variabelen zetten maar los erbij in je preg_match. Het komt op hetzelfde neer maar het staat zo slordig als je hem toch al in verschillende delen opdeelt.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

En hoe checken ze dat? Met een regex? Doen ze een A lookup? Want dat kan ik niet echt vinden.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
En geheid beter. Velen gingen je voor (met vaak absurd lange regexes) en faalden. Al was het maar omdat er langere TLD's toegevoegd worden. :P

[ Voor 44% gewijzigd door Voutloos op 10-05-2009 18:53 ]

{signature}


Acties:
  • 0 Henk 'm!

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 07-09 13:37
Snake schreef op zondag 10 mei 2009 @ 18:51:
[...]

En hoe checken ze dat? Met een regex? Doen ze een A lookup? Want dat kan ik niet echt vinden.
Moet je even opzoeken in de PHP source he, ik meen dat het ook gewoon een regex is. Dus zelfde effect, het gaat alleen om een regex welke bewezen is, en ontworpen is door meerdere mensen, met waarschijnlijk een flinke (over)dosis meer aan programeer kennis.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

fleppuhstein schreef op zondag 10 mei 2009 @ 19:35:
[...]


Moet je even opzoeken in de PHP source he, ik meen dat het ook gewoon een regex is. Dus zelfde effect, het gaat alleen om een regex welke bewezen is, en ontworpen is door meerdere mensen, met waarschijnlijk een flinke (over)dosis meer aan programeer kennis.
Inderdaad:
code:
1
"/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+(\\.[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?\\.)+[A-Za-z\\-]+))$/D"

Maar die accepteert streepjes in het TLD, en ook TLD's van één teken lang. Het is bij het gebruik van Filter dus mogelijk een streepje als TLD in te vullen...

Er is voor elke regexp wel wat te zeggen, maar dat is duidelijk te lezen op de link van DataGhost.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • GiantLeap
  • Registratie: Oktober 2005
  • Laatst online: 19-09 11:59

GiantLeap

One GiantLeap for mankind

Topicstarter
Bedankt voor alle reacties. Ik was de laatste week even druk met school vandaar deze iet wat late reactie. Een activerings systeem zat ik ook al aan te denken. Deze tutorial beschrijft hoe en wat. Het enige is dat, na het volgen van de tutorial ik PHP errors krijg:
Parse error: syntax error, unexpected T_ELSE in /home/[DOMEIN]/public_html/classes/user.php on line 137
Dit is het orgineel van user.php:


*snip*

[ Voor 96% gewijzigd door Creepy op 17-05-2009 14:36 ]

Mario Kart Tour: 211982902522
Rockstar Games Social Club (PC): GiantLeap

RC spul:
Traxxas Nitro Rustler
Hubsan X4 H107D
DJI Phantom 2 Vision+


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 22:02
Omdat je op regel 134 een accolade hebt toegevoegd maar de corresponderende accolade sluiten bent vergeten.

Mooi voorbeeld waarom je die dingen sowieso maar beter altijd kunt gebruiken.

[ Voor 27% gewijzigd door Kalentum op 16-05-2009 22:54 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Ho even. Een foutmelding posten en vervolgens twee enorme lappen coden en verder niks is hier niet de bedoeling. Het is hier geen helpdesk om even snel je code na te laten kijken. WIl je aub eerst zelf eens goed kijken wat er mis is?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.