webForumDet fria alternativet

.net och RegExp

5 svar · 427 visningar · startad av CatZ

CatZMedlem sedan jan. 20022 440 inlägg
#1

Har inte riktigt fattat det där med regexp och .net! Kan man också använda sin pattern till att ta bort otillåtna tecken automatiskt?

Det hela gäller en customvalidator i för vb. Alltså hittar den några otillåtna tecken vill jag ta bort dem.

RegExp.Replace(input, "pattern", output)

mitt problem är att det pattern jag har för att matcha inte vill fungera med replace. Låt oss säga att jag söker en match med

^[a-zA-Z0-9]+$

Hur skulle jag kunna få samma mönster att helt enkelt ta bort otillåtna tecken?

Har lite problem då vi ska söka i databasen efter något ledigt (AutoPostBack) och då måste jag ta bort otillåtna tecken innan jag söker annars går det galet.

Har löst det så länge med följande kod. Tyvärr känns den både klumpig och ful.

Function SQLEncode(ByVal myString As String)
			myString = Replace(myString, "'", "")
			myString = Replace(myString, "!", "")
			myString = Replace(myString, "?", "")
			myString = Replace(myString, "*", "")
			myString = Replace(myString, "&", "")
			myString = Replace(myString, "^", "")
			myString = Replace(myString, "%", "")
			myString = Replace(myString, "$", "")
			myString = Replace(myString, "~", "")
			myString = Replace(myString, "`", "")
			myString = Replace(myString, ")", "")
			myString = Replace(myString, "(", "")
			myString = Replace(myString, "=", "")
			myString = Replace(myString, "\", "")
			myString = Replace(myString, "|", "")
			myString = Replace(myString, ";", "")
			myString = Replace(myString, ":", "")
			myString = Replace(myString, "<", "")
			myString = Replace(myString, ">", "")
			myString = Replace(myString, " ", "")
			myString = Replace(myString, ",", "")
			myString = Replace(myString, ".", "")
			myString = Replace(myString, "[", "")
			myString = Replace(myString, "]", "")
			myString = Replace(myString, "{", "")
			myString = Replace(myString, "}", "")
			myString = Replace(myString, "/", "")
			myString = Replace(myString, """", "")
			myString = Replace(myString, "#", "")
			myString = Replace(myString, "@", "")
			myString = Replace(myString, "å", "")
			myString = Replace(myString, "¨", "")
			myString = Replace(myString, "ä", "")
			myString = Replace(myString, "ö", "")
			myString = Replace(myString, "¤", "")
			myString = Replace(myString, "Å", "")
			myString = Replace(myString, "Ä", "")
			myString = Replace(myString, "Ö", "")
			myString = Replace(myString, "´", "")
			myString = Replace(myString, "+", "")
			SQLEncode = myString
		End Function
PMedlem sedan jan. 20012 204 inlägg
#2

Nu har jag inget svar på problemet men att ställa upp massa kod som

string hej = hej.Funktion()

är inte effektivt då det skapas en ny objekt varje gång. Kolla på System.Text.StringBuilder klassen i så fall

CatZMedlem sedan jan. 20022 440 inlägg
#3

P skrev:

Nu har jag inget svar på problemet men att ställa upp massa kod som

string hej = hej.Funktion()

är inte effektivt då det skapas en ny objekt varje gång. Kolla på System.Text.StringBuilder klassen i så fall

Tack för att du påpekar det uppenbara! :P Det är ju därför jag vill använda regexp.replace har ändrat till följande kod men den är ju inte alls dynamisk då jag vill säga tillåt alfanumeriska värden och - & _ men _ / - ska inte tillåtas först eller sist.

Helt klart ett fall för regexp och inte

Public Shared Function SQLEncode(ByVal myString As String)
			Dim sb As New StringBuilder(myString)
			sb.Replace("'", "")
			SQLEncode = sb.ToString
		End Function

Märker skillnaden dock, det går mycket fortare om man pangar på med en sablans massa konstiga tecken.

DinoMedlem sedan sep. 20011 914 inlägg
#4

Varför inte använda en RegularExpressionValidator från början som ser till att bara släppa igenom godkända tecken.

<asp:RequiredFieldValidator 
   Id="RequiredFieldValidator2"
   ControlToValidate="TextBox1"
   ErrorMessage="*"
   runat="server"/> 
<asp:RegularExpressionValidator 
   Id="RegularExpressionValidator1" 
   ControlToValidate="TextBox1"
   ValidationExpression="^[a-zA-Z0-9]+$"
   ErrorMessage="You are a very very evil person, aren't you."
   runat="server"/>
CatZMedlem sedan jan. 20022 440 inlägg
#5

Du läste nog inte hela meddelandet, det fungerar som sagt utmärkt att kolla med det, men jag skulle vilja göra ett mönster som tar bort otillåtna tecken eftersom en sökning görs mot databasen och jag har ingen möjlighet att validera den kontrollen å det viset innan sökningen.

drunken_masterMedlem sedan feb. 200435 inlägg
#6

Testa med detta eller något liknande.
[^a-zA-Z0-9]+

141 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)