webForumDet fria alternativet

stränghantering - hitta url

.NETur .NET

10 svar · 447 visningar · startad av Kromp

Medlem sedan okt. 2002103 inlägg
Frågan#1

nån som har lite schnygg vb.net kod/länk till exempel för att i en textmassa göra länkar av webbadresser som hittas?

Medlem sedan jan. 20011 140 inlägg
#2

Den här funktionen använder jag

Public Shared Function makelink(ByVal y As String) As String
            Dim mDelimit As String
            Dim re As Regex
            mDelimit = Chr(0)
            re = New Regex("(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+)", RegexOptions.IgnoreCase)
            y = re.Replace(y, "<a href=""mailto" & mDelimit & ":$1"">$1</a>")
            re = New Regex("([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url]|mailto:)(\S)(\S+)", RegexOptions.IgnoreCase)
            y = re.Replace(y, "<a href=""$1$2" & mDelimit & "$3"" target=""_blank"">$2" & mDelimit & "$3</a>")
            re = New Regex("(www\.(\S)(\S+))", RegexOptions.IgnoreCase)
            y = re.Replace(y, "<a href=""http://$1"" target=""_blank"">$1</a>")
            makelink = Replace(y, mDelimit, "")
        End Function
Medlem sedan jan. 2004678 inlägg
#3

någon som har lust att förklara lite ungefär hur den här funktionen fungerar? hur använder man alla $1 och $2 osv och när ska man använda [A-Za-z0-9] istället för (\S) osv... försöker bygga en egen funktion och utgår ifrån den här. Försökte kolla lite på msdn om man kan hitta nån lista om vad alla / och \ och * används till men hittar inget. Någon som vet och har lust att förklara lite? :)

Medlem sedan jan. 2004678 inlägg
#4

jippie. vad kul satt och skrev ett inlägg här och råkade stänga rutan på nåt sätt så nu måste jag skriva om allt.

jag löste problemet genom att testa mig fram lite men undrar nu hur jag ska kunna tillämpa en funktion i den funktionen.

om jag skrever [user]greggan[/user] vill jag att det blir länken <a href="userprofile.aspx?userid=1">greggan</a>

jag har skapat en funktion som läser av användarnamnet och gör om det till användarid. Men jag kan inte tillämpa den funktionen i den här funktionen. funktionen($2) vill jag göra.

function nicktoid(txt)
	dim cn as new oledbconnection("PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=E:\Inetpub\Databaser\tihi.mdb;")
	dim cmd as new oledbcommand("select * from users where nickname='" & txt & "'" ,cn)
	dim dr as oledbdatareader
	dim userid as integer
	cn.open()
	dr = cmd.ExecuteReader()
	dr.read()
	userid = dr("userid")
	dr.close()
	cn.close()
	txt = userid
	nicktoid = txt
end function

sen har jag den här funktionen

Public Shared Function makelink(ByVal y As String) As String
            Dim mDelimit As String
            Dim re As Regex
            mDelimit = Chr(0)
            re = New Regex("(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+)", RegexOptions.IgnoreCase)
            y = re.Replace(y, "<a href=""mailto" & mDelimit & ":$1"">$1</a>")
            re = New Regex("([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url]|mailto:)(\S)(\S+)", RegexOptions.IgnoreCase)
            y = re.Replace(y, "<a href=""$1$2" & mDelimit & "$3"" target=""_blank"">$2" & mDelimit & "$3</a>")
            re = New Regex("(www\.(\S)(\S+))", RegexOptions.IgnoreCase)
            y = re.Replace(y, "<a href=""http://$1"" target=""_blank"">$1</a>")
            re = New Regex("(\[user\])((\S)(\S+))(\[\/user\])", RegexOptions.IgnoreCase)
			y = re.Replace(y, "<a href=""userprofile.aspx?userid=$2"" target=""_blank"">$2</a>")
			makelink = Replace(y, mDelimit, "")
End Function

om jag nu skriver [user]greggan[/user] får jag fram att länken blir userid=greggan istället för 1... hur ska jag kunna tillämpa min funktion på $2?? :q

Medlem sedan juni 20008 205 inlägg
#5

Det enklaste och effektivaste alternativet är väl egentligen att ha en lookupsida som tar emot ett användarnamn i stället (typ lookup.aspx?name=greggan). Om den kan hitta det i databasen, omdirigera till rätt profilsida (typ luserprofile.aspx?id=1), annars visa ett felmeddelande. Något trevligt sätt att göra det på i regexparna finns desvärre inte...

Medlem sedan jan. 2004678 inlägg
#6

hmm.. det där var ju en jävligt bra idé.. ska testa direkt.. men jag kom på en till liten sak. Kan man lösa så att [user]-grejjen bara fungerar på namn som finns i databasen? eller är det typ för avancerat?

Medlem sedan jan. 2004678 inlägg
#7

det fungerade, och blev bra. :)
sen får vi se hur resten går typ ;)

Medlem sedan juni 20008 205 inlägg
#8

greggan skrev:

hmm.. det där var ju en jävligt bra idé.. ska testa direkt.. men jag kom på en till liten sak. Kan man lösa så att [user]-grejjen bara fungerar på namn som finns i databasen? eller är det typ för avancerat?

Du kan ju använda regexparna för att få fram alla förekomster av [user]någonting[/user] när inlägget postas, och sedan loopa igenom alla dessa förekomster, kolla om namnen finns och sedan utifrån detta bestämma dig för om du ska skälla ut användaren som skrivit eller ej. Eller så kan du strunta i det ;)

Medlem sedan jan. 2004678 inlägg
#9

höhö

jag löste det genom att om man skriver [user]nånsomintefinns[/user] så bllir det en länk också men när man klickar på den så fixar redirectsidan och kollar om användaren finns eller inte.. så antingen blir man redirectad till användarens profil om användaren finnns eller så blir man ridirectad till en sida där det står att användaren saknas... *tihi*

Medlem sedan dec. 1999707 inlägg
#10

Kan tipsa om programmet The Regulator som man skriver RegExp-uttryck i. Där kan skriva och testa uttryck som man vill göra, söka efter användbara uttryck som andra lagt upp på nätet samt ladda upp egna som man skrivit.

http://royo.is-a-geek.com/iserializable/regulator/

Medlem sedan jan. 2004678 inlägg
#11

låter najs.. ska testa det sen. :)

146 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)