/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Plukke email adresse ud fra en streng
Fra : Hans


Dato : 04-12-07 22:26

Hvordan får jeg email adressen ud af denne streng?

"Min email adresse er hans@nowhere.xyz og den er gyldig."

Jeg tror det er noget med ereg_replace men kan ikke lige sætte ord på?



 
 
Bertel Lund Hansen (05-12-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 05-12-07 00:42

Hans skrev:

> Hvordan får jeg email adressen ud af denne streng?

> "Min email adresse er hans@nowhere.xyz og den er gyldig."

Her er en metode:

$streng="Min email adresse er hans@nowhere.xyz og den er gyldig.";
$elements=explode(" ",$streng);
foreach ($element as $elem)
   if (strpos($elem,'@')) {
      $email=$elem;
      break;
   }

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Kim Ludvigsen (05-12-2007)
Kommentar
Fra : Kim Ludvigsen


Dato : 05-12-07 12:03

Den 05-12-07 00.41 skrev Bertel Lund Hansen følgende:
> Hans skrev:
>
>> Hvordan får jeg email adressen ud af denne streng?
>
> Her er en metode:
> $streng="Min email adresse er hans@nowhere.xyz og den er gyldig.";
> $elements=explode(" ",$streng);

Hans skal vel lige være opmærksom på tegnsætningen?

Hvis nu strengen er skrevet med brug af det gamle komma, eller hvis
sætningen i stedet er "Min email adresse er hans@nowhere.xyz.", så vil
det vel ikke virke?

--
Mvh. Kim Ludvigsen
Polimiken - en levende netavis, der tør, hvor selv Ekstra Bladet tier.
http://polimiken.dk

Bertel Lund Hansen (05-12-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 05-12-07 13:07

Kim Ludvigsen skrev:

> Hans skal vel lige være opmærksom på tegnsætningen?

Du har ret. Version 2:

function emailtrim ($address) {
   for ($start=0; $address[$start]<'A'; ++$start);
   for ($slut=strlen($address); $address[$slut-1]<'A'; --$slut);
   return substr($address,$start,$slut-$start);
}

$streng="Min email adresse er ..hans@nowhere.xyz,, og den er gyldig.";
$elements=explode(" ",$streng);
foreach ($element as $elem)
   if (strpos($elem,'@')) {
      $email=emailtrim($elem);
      break;
   }

Der er ikke tester for om @ findes i strengen.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Martin Højriis Krist~ (06-12-2007)
Kommentar
Fra : Martin Højriis Krist~


Dato : 06-12-07 00:58

"Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
news:t94dl3tsigkc8le79m3umfra1tuib99mla@4ax.com...
> $streng="Min email adresse er ..hans@nowhere.xyz,, og den er gyldig.";

"makr@makr$.invalid er ugyldig, brug makr@makr.dk"

Der er et (langt) regulært udtryk der piller gyldige mails, men det kan jeg
ikke pt finde.

Der er et simpelt udtryk her:
http://www.phpf1.com/tutorial/php-regular-expression.html

--
Martin Højriis Kristensen
http://www.martinshjemmeside.dk/ - Lidt af hvert
http://www.mestomaarhus.dk/ - Mest om Århus



Bertel Lund Hansen (06-12-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 06-12-07 01:29

Martin Højriis Kristensen skrev:

> Der er et simpelt udtryk her:

Det er en tutorial med indføring i regulære udtryk. Den første
opskrift leder efter en mailadresse man kender i forvejen.

Jeg bruger stort set ikke regulære udtryk og har ikke gjort det i
PHP. Jeg er ikke vant til dem, og jeg savner dem ikke.

Hvis jeg fandt et eksempel der kunne udtrække en mailadresse fra
en streng, ville jeg lave en hastighedstest, og hvis den var
overbevisende til de regulære udtryks fordel, ville jeg nok
overveje at lære det ordentligt.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Martin Højriis Krist~ (06-12-2007)
Kommentar
Fra : Martin Højriis Krist~


Dato : 06-12-07 01:44

"Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
news:lcgel398tf8i5eqvn1gbje1l29r05q0t8r@4ax.com...
>> Der er et simpelt udtryk her:
> Det er en tutorial med indføring i regulære udtryk. Den første
> opskrift leder efter en mailadresse man kender i forvejen.

Udtrykket: [a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}
Leder efter en adresse komponeret
af mindst et af tegnene a-z, A-Z, 0-9 samt . _ og -
efterfulgt af @
efterfulgt af mindst et af tegnene a-z, A-Z, 0-9 samt -
efterfulgt af 2-5 stk af tegnene a-z, A-Z samt .

Der er såvel falsk positive og falsk negative ved dette udtryk, men det er
ret simpelt.

> Jeg bruger stort set ikke regulære udtryk og har ikke gjort det i
> PHP. Jeg er ikke vant til dem, og jeg savner dem ikke.

Regulære udtryk kan løse noget tekst-parsing du stort set ikke kan løse på
andre måder.
Fx omdannelse af pseudo-tags til rigtig HTML

> Hvis jeg fandt et eksempel der kunne udtrække en mailadresse fra
> en streng, ville jeg lave en hastighedstest, og hvis den var
> overbevisende til de regulære udtryks fordel, ville jeg nok
> overveje at lære det ordentligt.

Det er min påstand at for alt andet end de simpleste former for tekstuel
parsing, så vil de regulære udtryk vinde på såvel antal linjers kode,
robusthed og hastighed.

--
Martin Højriis Kristensen
http://www.martinshjemmeside.dk/ - Lidt af hvert
http://www.mestomaarhus.dk/ - Mest om Århus



N/A (06-12-2007)
Kommentar
Fra : N/A


Dato : 06-12-07 08:48



Martin Højriis Krist~ (06-12-2007)
Kommentar
Fra : Martin Højriis Krist~


Dato : 06-12-07 08:48

"Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
news:m9lel3tjvemsopa07ig875skk0duuc1gve@4ax.com...
> Jeg lavede en test hvor jeg kodede 'almindeligt' noget der
> svarede til det regulære udtryk. Ved en kvart million gennemløb
> var det regulære udtryk ca. 15 hurtigere end det andet (1 sek, 15
> sek).

Der mangler formentligt et ord i den sætning, men jeg forstår at du har
bekræftet min påstand?

> Her er koden:
> http://test.lundhansen.dk/show_phpcode.php

file(XXXtest.php) [function.file]: failed to open stream

--
Martin Højriis Kristensen
http://www.martinshjemmeside.dk/ - Lidt af hvert
http://www.mestomaarhus.dk/ - Mest om Århus



Bertel Lund Hansen (06-12-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 06-12-07 12:09

Martin Højriis Kristensen skrev:

> Der mangler formentligt et ord i den sætning

Nej, det gør der nu ikke.

>, men jeg forstår at du har bekræftet min påstand?

Jeg ændrede koden til noget hurtigere og kom ned på at regulære
udtryk er fire gange hurtigere, men ja de er væsentligt
hurtigere.

> file(XXXtest.php) [function.file]: failed to open stream

Jeg blokere for fidusen fordi koden var forkert. Nu er der adgang
til den rigtige kode. Der er en smule forskel på hvad de to
kodestumper laver fordi jeg tillod mig at lave en forenkling af
'min' metode (den tillader - og _ i alle tre elementer af
adressen).

Det første tegn i $letter er et hårdt mellemrum der bare skal
blokere position 0.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Martin Højriis Krist~ (06-12-2007)
Kommentar
Fra : Martin Højriis Krist~


Dato : 06-12-07 21:52

"Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
news:pnlfl3lj0litop9o9vk1em8j4dm74eqi2m@4ax.com...
>> Der mangler formentligt et ord i den sætning
> Nej, det gør der nu ikke.

Der skulle ikke stå 15 gange eller 15 sekunder?

>>, men jeg forstår at du har bekræftet min påstand?
> Jeg ændrede koden til noget hurtigere og kom ned på at regulære
> udtryk er fire gange hurtigere, men ja de er væsentligt
> hurtigere.

Regulære udtryk er centralt i Perl og PHP nedstammer fra Perl, så det er
ikke så underligt.

--
Martin Højriis Kristensen
http://www.martinshjemmeside.dk/ - Lidt af hvert
http://www.mestomaarhus.dk/ - Mest om Århus



Peter Brodersen (06-12-2007)
Kommentar
Fra : Peter Brodersen


Dato : 06-12-07 23:58

On Thu, 6 Dec 2007 21:51:58 +0100, "Martin Højriis Kristensen"
<usenet@makr.dk> wrote:

>> Jeg ændrede koden til noget hurtigere og kom ned på at regulære
>> udtryk er fire gange hurtigere, men ja de er væsentligt
>> hurtigere.
>Regulære udtryk er centralt i Perl og PHP nedstammer fra Perl, så det er
>ikke så underligt.

Bumbum... i lang tid understøttede PHP kun POSIX-style regulære udtryk
(ereg-extensionen). Først senere blev PCRE implementeret og blev den
foretrukne extension for regulære udtryk. Det gav både en større
fleksibilitet (flere features) og en langt hurtigere hastighed for en
del operationer, men samtidig en lidt pudsig implementation, hvor man
også skulle tilføje delimiters som en del af strengen.

ereg-extensionen ryger i øvrigt ud i PECL i PHP6.

--
- Peter Brodersen
Kendt fra Internet

Martin Højriis Krist~ (07-12-2007)
Kommentar
Fra : Martin Højriis Krist~


Dato : 07-12-07 08:41

"Peter Brodersen" <usenet2007@ter.dk> skrev i en meddelelse
news:47587e94$0$90274$14726298@news.sunsite.dk...
>>Regulære udtryk er centralt i Perl og PHP nedstammer fra Perl, så det er
>>ikke så underligt.
> Bumbum... i lang tid understøttede PHP kun POSIX-style regulære udtryk

OK, min PHP-historie er tydeligvis inkomplet.

--
Martin Højriis Kristensen
http://www.martinshjemmeside.dk/ - Lidt af hvert
http://www.mestomaarhus.dk/ - Mest om Århus



Peter Brodersen (06-12-2007)
Kommentar
Fra : Peter Brodersen


Dato : 06-12-07 07:58

On Thu, 6 Dec 2007 00:58:14 +0100, "Martin Højriis Kristensen"
<usenet@makr.dk> wrote:

>Der er et (langt) regulært udtryk der piller gyldige mails, men det kan jeg
>ikke pt finde.

Du tænker sandsynligvis på RFC2822.

Det tjek er dog ofte blevet misforstået til kun at omhandle selve
adressen, men den dækker hele strengen inklusive afsendernavn, m.m..
For eksempel er følgende:

"Martin Højriis Kristensen" <usenet@makr.dk>
Bertel Lund Hansen <unospamo@lundhansen.dk>
... gyldige adresser.

Såvidt, jeg husker, understøttes der også flere e-mail-adresser samt
kommentarer midt i selve adressen.

--
- Peter Brodersen
Kendt fra Internet

Martin Højriis Krist~ (06-12-2007)
Kommentar
Fra : Martin Højriis Krist~


Dato : 06-12-07 08:49

"Peter Brodersen" <usenet2007@ter.dk> skrev i en meddelelse
news:47579d95$0$90275$14726298@news.sunsite.dk...
>>Der er et (langt) regulært udtryk der piller gyldige mails, men det kan
>>jeg
>>ikke pt finde.
> Du tænker sandsynligvis på RFC2822.

Jep

> Det tjek er dog ofte blevet misforstået til kun at omhandle selve
> adressen, men den dækker hele strengen inklusive afsendernavn, m.m..

Det er forøvrigt rigtigt.

--
Martin Højriis Kristensen
http://www.martinshjemmeside.dk/ - Lidt af hvert
http://www.mestomaarhus.dk/ - Mest om Århus



Martin (05-12-2007)
Kommentar
Fra : Martin


Dato : 05-12-07 13:28

Hans wrote:
> Hvordan får jeg email adressen ud af denne streng?
>
> "Min email adresse er hans@nowhere.xyz og den er gyldig."
>
> Jeg tror det er noget med ereg_replace men kan ikke lige sætte ord på?
>

$ret = preg_replace("#([\n ])([a-z0-9\-_.]+?)@([^, \n\r]+)#i", "\\1<!--
auto-mailto start --><a href=\"mailto:\\2@\\3\">\\2@\\3</a><!--
auto-mailto end -->", $ret);

Denne laver foo@bar.invalid om til et <a
href="mailto:foo@bar.invalid">foo@bar.invalid</a>

Bertel Lund Hansen (05-12-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 05-12-07 15:33

Martin skrev:

> Denne laver foo@bar.invalid om til et <a
> href="mailto:foo@bar.invalid">foo@bar.invalid</a>

Men den kan ikke finde en emailadresse i en vilkårlig streng.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Peter Brodersen (05-12-2007)
Kommentar
Fra : Peter Brodersen


Dato : 05-12-07 15:52

On Wed, 05 Dec 2007 15:32:51 +0100, Bertel Lund Hansen
<unospamo@lundhansen.dk> wrote:

>Men den kan ikke finde en emailadresse i en vilkårlig streng.

... eller i starten af en streng.

--
- Peter Brodersen
Kendt fra Internet

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste