webForumDet fria alternativet

Fler tecken i RegExp.

ASP

9 svar · 331 visningar · startad av Frezze

Medlem sedan apr. 2004114 inlägg
Frågan#1

Hejsan, jag använder mig av RegExp till "taggar" för användarna, och för att användarna inte ska "förstöra" html koden som bildas genom att skriva andra tecken osv. så kör jag i RegExp koden något som kollar att det är bara vissa tecken som får finnas mellan taggarna dom skriver ut.

.Pattern="\< *user *>([a-z/A-Z/0-9/_/-/-/]*?)</user>"

Väldigt enkel kod, så den släpper igenom a-z, A-Z, 0-9 och _ -

Men innan jag ändrade i min registreringskoden, så kunde man registrera sig med användarnamn som kunde ha ` ´ (vet inte hur de stavas) och mellanslag. Nu till min fråga, hur låter jag RegExp´n släppa igenom tecken med ´ på och mellanslag?

Tack på förhand!

Medlem sedan maj 200010 687 inlägg
#2
[\w\s-´`]
Medlem sedan apr. 2004114 inlägg
#3

Erik Juhlin skrev:

[\w\s-´`]

Hrm, märkligt. Jag har testat allt möjligt med att trycka in den koden, och ändrat fram och tillbaka, men ingen inverkan, det fungerar fortfarande inte att skriva é eller annat tecken med ´på.

Medlem sedan juni 2004533 inlägg
#4

Frezze skrev:

Väldigt enkel kod, så den släpper igenom a-z, A-Z, 0-9 och _ -

Nja... Den släpper igenom a-z, /, A-Z, /, 0-9, /, _, /-/, - och /.

\s matchar alla typer av mellanrum, alltså mellanslag, tabbar, radbrytingar och så vidare. Ifall du bara vill tillåta mellanslag så får du använda mellanslag.

Eftersom bindestreck används för att ange intervall så måste du escape:a det för att ange tecknet bindestreck.

För att släppa igenom tecken med accenter så får du ange varje tecken separat.

Exempel:

[\w \-éèóòáà]

Medlem sedan apr. 2004114 inlägg
#5

Guffa skrev:

Frezze skrev:

Väldigt enkel kod, så den släpper igenom a-z, A-Z, 0-9 och _ -

Nja... Den släpper igenom a-z, /, A-Z, /, 0-9, /, _, /-/, - och /.

\s matchar alla typer av mellanrum, alltså mellanslag, tabbar, radbrytingar och så vidare. Ifall du bara vill tillåta mellanslag så får du använda mellanslag.

Eftersom bindestreck används för att ange intervall så måste du escape:a det för att ange tecknet bindestreck.

För att släppa igenom tecken med accenter så får du ange varje tecken separat.

Exempel:

[\w \-éèóòáà]

Hrm, okej.. jo, jag tänkte på de viset också innan, dvs. att jag angav det så här:
[a-z/A-Z/0-9/_/-/-/é/]

Det fungerade inte, men eftersom du nämnde detta igen, så tänkte jag att jag kanske gjort fel och testade igen, men.. utan något vidare resultat, den släpper igenom allt annat än text med é.

Medlem sedan jan. 2003438 inlägg
#6

När jag testar denna pattern:

[\w-éèóòáà]

Testade även din och den funkade också:

[a-z/A-Z/0-9/_/-/-/é/]

Vet inte riktigt varför det blir fel, men du får nog visa mer kod för att kunna komma vidare.

Medlem sedan apr. 2004114 inlägg
#7

SannyW skrev:

När jag testar denna pattern:

[\w-éèóòáà]

Testade även din och den funkade också:

[a-z/A-Z/0-9/_/-/-/é/]

Vet inte riktigt varför det blir fel, men du får nog visa mer kod för att kunna komma vidare.

Hrm, konstigt. Här kommer hela koden:

Function nCode(text)
text = server.HTMLEncode(text)
text = Replace(text,vbCrLf,"<br>")
With New RegExp
  .Global = true
  .IgnoreCase = true
  .Pattern="\&amp;"
  text = .Replace(text,"&")
  .Pattern="\&lt; *user *&gt;([a-z/A-Z/0-9/_/-/-/é/]*?)&lt;/user&gt;"
  text = .Replace(text,"<a href=""search_user.asp?ns_user=$1"">$1</a>")
  text = .Replace(text,""&year(date)&"")
  .Pattern = "([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url])([a-z/A-Z/0-9/./_/-/-/%/?/:/~/*/(/)/!/=/&]+)"
  Set objMatches=.Execute(text)
End With
Set RegExp = Nothing

strResult=""
lngPos=1
For each objMatch in objMatches
   If objMatch.FirstIndex>lngPos Then
      strResult=strResult & Mid(text, lngPos, objMatch.FirstIndex-lngPos+1)
   End If
   strFound=objMatch

   If len(strFound) > 50 Then
   lank = left(strFound, 25) & "..." & right(strFound, 15)
   strFound = "<a href="""&strFound&""" target=""_blank"">"&lank&"</a>"
   else
   strFound = "<a href="""&strFound&""" target=""_blank"">"&strFound&"</a>"
   end if

   strResult=strResult & strFound
   lngPos=objMatch.FirstIndex+objMatch.Length+1
Next
strResult=strResult & Mid(text, lngPos)

nCode = strResult
End Function
Medlem sedan juni 2004533 inlägg
#8

Jag kanske ska vara lite tydligare: Du ska inte ha / mellan tecknen i en mängd.

Bindestreck måste escape:as, som sagt.

[a-z/A-Z/0-9/_/-/-/é/] ska vara [a-zA-Z0-9_\-é] (eller [\w\-é]).

Medlem sedan apr. 2004114 inlägg
#9

Guffa skrev:

Jag kanske ska vara lite tydligare: Du ska inte ha / mellan tecknen i en mängd.

Bindestreck måste escape:as, som sagt.

[a-z/A-Z/0-9/_/-/-/é/] ska vara [a-zA-Z0-9_\-é] (eller [\w\-é]).

Ojsan, missade det där, men... testade din kod, och é fungerar inte, det går bara inte.

Medlem sedan juni 2004533 inlägg
#10

Eftersom du html-kodar texten så måste du ju använda html-koderna för tecknen i mönstret. Alltså &#233; istället för é.

Använd ByVal i funktionsdefinitionen, annars kommer du ju att ändra värdet på det som du skickar in i funktionen:

Function nCode(ByVal text)
281 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)