[PHP] sscanf werkt niet?

Pagina: 1
Acties:

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Hoi,

Ik wil een email adres checken via sscanf, dat leek me namelijk wel een leuke (en makkelijke) manier om te doen. Dus heb ik iets als dit:
PHP:
1
<?    $EmailAddress = "Blaat@Test.com";    $Name = "";    $Domain = "";    $Extension = "";    sscanf( $EmailAddress, "%s@%s.%s", &amp;$Name, &amp;$Domain, &amp;$Extension);    echo "Name: ".$Name."<br>";        echo "Domain: ".$Domain."<br>";    echo "Extension: ".$Extension."<br>";?>

Maar dan krijg ik als output:
Name: Blaat@Test.com
Domain:
Extension:
Mijn eerste gedachte was dat het wellicht door de punt zou komen, hoewel me dat niet waarschijnlijk leek, en dat was het ook niet.
Ik meen toch wel de goede syntax te gebruiken :? Is het een bug, of doe ik toch iets compleet fout?

-Edit-
Oh ja, heb ook de methode list( $Name, $Domain, $Extension) = sscanf( $EmailAddress, "%s@%s.%s") gebruikt: zelfde resultaat :/

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

dit kan sscanf niet volgens mij :?

Doet iets met Cloud (MS/IBM)


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op zondag 14 juli 2002 00:22 schreef D2k het volgende:
dit kan sscanf niet volgens mij :?
Dacht het toch wel, in de manual staat namelijk:
PHP:
1
<?// get author info and generate DocBook entry$auth = "24\tLewis Carroll";$n = sscanf($auth,"%d\t%s %s", &amp;$id, &amp;$first, &amp;$last);echo "<author id='$id'>    <firstname>$first</firstname>    <surname>$last</surname></author>\n";?>

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op zondag 14 juli 2002 00:23 schreef _Mo_ het volgende:

[..]

Dacht het toch wel, in de manual staat namelijk:
[php
ff de manual erbij gepakt en verdomd ;)
um moet je die @ niet als \@ zetten?
of is dit niet eenvoudiger te regexen?

Doet iets met Cloud (MS/IBM)


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op zondag 14 juli 2002 00:24 schreef D2k het volgende:

[..]

ff de manual erbij gepakt en verdomd ;)
um moet je die @ niet als \@ zetten?
of is dit niet eenvoudiger te regexen?
Had ik ook al trouwens geprobeerd... maar misschien is inderdaad regex nu de enige oplossing. Maar dit leek me in de eerste instantie lekker makkelijk :) (ben niet zo heel erg thuis in regex :()
Ik vind het toch vaag dat het niet werkt, kan toch weinig fout doen in zo'n kort stukje.. then again, I just might ;) Bugje dan?

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op zondag 14 juli 2002 00:27 schreef _Mo_ het volgende:

[..]

Had ik ook al trouwens geprobeerd... maar misschien is inderdaad regex nu de enige oplossing. Maar dit leek me in de eerste instantie lekker makkelijk :) (ben niet zo heel erg thuis in regex :()
Ik vind het toch vaag dat het niet werkt, kan toch weinig fout doen in zo'n kort stukje.. then again, I just might ;) Bugje dan?
werkt dat voorbeeld wel trouwens?

Doet iets met Cloud (MS/IBM)


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op zondag 14 juli 2002 00:33 schreef D2k het volgende:

[..]

werkt dat voorbeeld wel trouwens?
Ja...had ik eigenlijk helemaal niet getest... hummz :?
Volgens mij heeft de punt als enige in de format string een betekenis... maar \. werkt ook niet, of %. of.. wat :?

'k heb nu trouwens een ereg die de email checked. Maar ik zou toch graag willen weten wat ik nou fout doe... want ik begrijp het echt niet :'(

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
weer zo'n probleem met sscanf, ik heb een filenaam blaat.gif bijvoorbeeld, en daar wil ik de naam en extensie scheiden, dus naam: blaat en extensie gif ... nu wil ik dat met een sscanf doen, dus krijg ik zoiets als dit:
PHP:
1
<?sscanf( "blaat.gif", "%s.%s", &amp;$Name, &amp;$Extension);?>

Maar de hele string zit in $Name, het voorbeeld uit de manual werkt wel, maar daar zit dus geen punt in. Is er een manier om die punt de "escapen"? \. werkt niet. Hoop dat iemand kan helpen...

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:34
Lees het commentaar op php.net!

sscanf is heel dom en gaat geen 'moeite' doen om aan 't gegeven formaat te voldoen.

Dat betekent dat als het formaat bijvoorbeeld: "aaa%s" is en de invoer begint toevallig met "aaa", dan krijg je de rest in je string-variabele. Als je invoer niet met "aaa" begint geeft sscanf 't op. Zodra 'ie een variabele gaat vullen, stopt sscanf daar pas mee wanneer er whitspace langskomt.

Als je dus met format "%s.%s" probeert "blaat.blaat" in te lezen, dan stopt sscanf die hele string in de eerste string variabele, komt tot de conclusie dat de punt niet meer te matchen valt en houdt er mee op.

Voor echt parsen heb je geavanceerdere methoden, zoals reguliere expressies en functies die strings opdelen nodig. sscanf is hier nooit voor bedoeld.

Je kunt dus ook niet "Mijn Naam/Mijn Adres" matchen met "%s/%s" of de hier op geposte varianten daarop.

Verwijderd

Dit is wel te doen met sscanf, je moet er alleen een iets ingewikkeldere syntax voor gebruiken:
code:
1
sscanf($emailadres, "%[^\@]\@%[^\.]\.%s", $x, $y, $z);

Wat dit doet: Eerste gedeelte leest string, waar geen "@" inzit, hierna komt de @ van het emailadres, en naarna het een string zonder ".", en in $z komt alles naar de punt.

Ik heb voor de zekerheid de "@" en "." ge-escaped met een \, maar weet niet zeker of dit moet of wel werkt, maar daar kom je zelf wel uit gok ik.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 17 juli 2002 09:54 schreef T1cal het volgende:
Als je er dan toch een halve regexp van maakt, doe het dan gewoon met preg_match :P

Verwijderd

Op woensdag 17 juli 2002 11:38 schreef ACM het volgende:

[..]

Als je er dan toch een halve regexp van maakt, doe het dan gewoon met preg_match :P
Heh, die functie kende ik nog niet :)

Heb zelf lichte voorkeur voor functies waar man-pages van zijn, zal wel door teveel C code komen *D
Pagina: 1