---
title: "Text till länkar."
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/167770-text-till-länkar"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "saw"
published: "2008-01-04T08:09:10.000Z"
updated: "2008-08-30T13:21:12.000Z"
replies: 5
views: 707
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/167770-text-till-länkar"
---

# Text till länkar.

## #1 — saw, 2008-01-04T08:09Z

Jag har hittat ett litet trevligt script som letar upp www-adresser till länkar.

```
public  string ActivateLinks(object Text)
        {
        string result = (string)Text;
        string patten = @"([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
        Regex chr = new Regex(patten, RegexOptions.IgnoreCase);
        Match m;
        for (m = chr.Match(result); m.Success; m = m.NextMatch())
            {
            result = result.Replace(m.Groups[0].ToString(),
                "<a href=\"HTTP://" + m.Groups[0].ToString() + "\" target='_blank'>" + m.Groups[0].ToString() + "</a>");
            }
        return result;
        }
```

Detta fungerar kanonbra, men hur gör jag för att bygga om denna så att den
även kan hitta mail-adress???  :i

Permalänk: https://www.webforum.nu/p/167770

## #2 — butiko, 2008-01-04T10:28Z

Du får modifiera ditt pattern att hitta mailadresser också. Sedan lägger du till en if-sats i din for-slinga där du letar efter @ i m-variabeln. Om sant lägger du till mailto, annars http. Detta borde funka. :)

```
    public string ActivateLinks(object Text)
    {
        string result = (string)Text;
        string patten = @"(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)|([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
        Regex chr = new Regex(patten, RegexOptions.IgnoreCase);
        Match m;
        for (m = chr.Match(result); m.Success; m = m.NextMatch())
        {
            if(m.ToString().Contains("@"))
                result = result.Replace(m.Groups[0].ToString(),
                   "<a href=\"mailto:" + m.Groups[0].ToString() + "\">" + m.Groups[0].ToString() + "</a>");
            else 
               result = result.Replace(m.Groups[0].ToString(),
                    "<a href=\"http://" + m.Groups[0].ToString() + "\" target='_blank'>" + m.Groups[0].ToString() + "</a>");
        }
        return result;
    }
```

Permalänk: https://www.webforum.nu/p/2067880

## #3 — saw, 2008-01-04T11:34Z

Helt sagoligt butiko tack och en god fortsättning.

Permalänk: https://www.webforum.nu/p/2067908

## #4 — Josef, 2008-01-04T19:23Z

Eller så byter man ut den långa if-satsen mot den lite kortare: :)

```
result = result.Replace(m.Groups[0].ToString(), 
     string.Format("<a href=\"{0}/{1}\" target=\"_blank\">{1}</a>",
                        m.ToString().Contains("@") ? "mailto:" : "http://", 
                        m.Groups[0].ToString());
```

Permalänk: https://www.webforum.nu/p/2068005

## #5 — Erik Juhlin, 2008-01-06T18:40Z

Bara för att man gör koden kortare så blir den inte bättre/mer lättläst.

Jag skulle istället skriva funktionen ungefär så här...

```
public static string ActivateLinks(string Text)
{
	const string pattern = @"(?<email>\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)|([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";

	return Regex.Replace(
		Text,
		pattern,
		new MatchEvaluator(delegate(Match match)
		{
			string prefix = match.Groups["email"].Length > 0 ? "mailto:" : "http://";

			return string.Format("<a href=\"{0}{1}\" target=\"_blank\">{1}</a>", prefix, match.Value);
		}),
		RegexOptions.IgnoreCase
	);
}
```

1\. Static funktion.
2\. Pattern som en konstant.
3\. Kollar om gruppen "email" innehåller nåt och ser då att det är en e-postadress.
4\. Använder match.Value. Istället för match.Groups\[0\].ToString().
5\. Använder inte strings Replace metod i loopen utan använder istället Regex Replace funktionen med en MatchEvaluator.

Permalänk: https://www.webforum.nu/p/2068367

## #6 — CatZ, 2008-08-30T13:21Z

Jag gjorde om den till en extension method. Nu behöver jag bara köra 

```
string.ActivateLinks();
```

Tack för den Erik! :)

Det enda som måste göras för att göra om den till en extension på string är att lägga den i en statisk verktygsklass och lägga till 

```
public static string ActivateLinks([b]this[/b] string text)
```

Permalänk: https://www.webforum.nu/p/2135973

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/167770-text-till-länkar
