Tjenixen! De främsta förbättringarna med koden är dels att ta in "ej tillåtna tecken" som ett argument med default-värde istället, och dels att byta till engelska namn. Nyfiken. Utan att ha testat, men något i stil med följande Utan att ha testat, men något i stil med följande Döp sedan gärna om EjTillåtnaTecken till strForbiddenChars eller nått. Och använd liten bokstav på i, inte I. Som någon redan sagt (tror jag?), du kan bifoga de förbjudna tecknen som argument till funktionen istället för att ha en fast teckensekvens i den. Byt också ut mot 0 istället för "0" (redan påpekat). Kanske ska kolla om någon svarat. [EDIT, raderat utkast till svar] Du anropar funktionen genom Tackar tackar, fungerade utmärt nu när jag vet hur man ska anropa functionen :) Testade just men asp.net sa att "'Let' and 'Set' assignment statements are no longer supported" på raderna: Man får skriva om funktionen lite för att stödja .NET, men det är inte så hemskt mycket mer jobb. Functionen fungerade i Vb6. Fast ej i asp.net Ok, här har du en identisk funktion för .NET Tackar tackar, funka utmärkt :)Ej tillåtna tecken och enbart tillåtnat tecken
Tänkte för skojs skull göra 2 functioner. Den ena ska kolla om det finns ett otilåtet tecken i en text och den andra kolla att bara tillåtna tecken skickats till functionen.
Koden för den först functionen är redan fixad men kan förmodlingen fixas till.
Koden är som följer:
Function Kolla(Text As String) As String
Dim EjTillåtnaTecken As String
Dim I As Integer
EjTillåtnaTecken = "*'/\$%;"
For I = 1 To Len(EjTillåtnaTecken)
If InStr(Text, Mid(EjTillåtnaTecken, I, 1)) <> "0" Then
Kolla = Mid(EjTillåtnaTecken, I, 1)
Exit For
End If
Next I
End Function
Nu är det bara det att jag inte riktigt vet hur jag ska göra för den andra.
Någon som har några förslag?
Tips om hur man kan förbättra min kod ovan välkommnas :D
Tänkte eventuallt försöka få till det så att man kan använda det på en asp.net sida med om det nu går.
Sv: Ej tillåtna tecken och enbart tillåtnat tecken
Sen är raden:
If InStr(Text, Mid(EjTillåtnaTecken, I, 1)) <> "0" Then
hemsk. Skriv
If InStr(Text, Mid(EjTillåtnaTecken, I, 1)) <> 0 Then
istället. (Ev. med Mid$ ist. för Mid också.)
Ett enkelt sätt att lösa det andra är att ange "tillåtna tecken" och bara vända på villkoret.
If InStr(Text, Mid(TillåtnaTecken, I, 1)) = 0 ThenSv:Ej tillåtna tecken och enbart tillåtnat tecken
Någon därute som kan ge ett exempel på Regular Expression som löser samma problem.Sv: Ej tillåtna tecken och enbart tillåtnat tecken
<code>
Function TextToPattern(Text)
Dim RegExp As Object
Dim Res As String
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.Global = True
RegExp.IgnoreCase = True
RegExp.Pattern = "([\.\+\?\*\[\]\{\^\$\|\(\)\\])"
Res = RegExp.Replace(Text, "\$1")
RegExp.Pattern = "\n"
Res = RegExp.Replace(Res, "\n")
RegExp.Pattern = "\t"
Res = RegExp.Replace(Res, "\t")
RegExp.Pattern = "\r"
Res = RegExp.Replace(Res, "\r")
RegExp.Pattern = "\s"
Res = RegExp.Replace(Res, "\s")
Set RegExp = Nothing
TextToPattern = Res
End Function
Public Function ValidateText(ByVal Text As String, ByVal AllowOnly As Boolean, ByVal Pattern As String) As Boolean
Dim RegExp As Object
Dim Ret As Boolean
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.Global = True
RegExp.Pattern = "[" & IIf(AllowOnly, "^", "") & TextToPattern(Pattern) & "]"
Ret = RegExp.Test(Text)
Set RegExp = Nothing
ValidateText = Not Ret
End Function
</code>Sv: Ej tillåtna tecken och enbart tillåtnat tecken
<code>
Function TextToPattern(Text) As String
Dim RegExp As Object
Dim Res As String
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.Global = True
RegExp.IgnoreCase = True
RegExp.Pattern = "([\.\+\?\*\[\]\{\^\$\|\(\)\\])"
Res = RegExp.Replace(Text, "\$1")
RegExp.Pattern = "\n"
Res = RegExp.Replace(Res, "\n")
RegExp.Pattern = "\t"
Res = RegExp.Replace(Res, "\t")
RegExp.Pattern = "\r"
Res = RegExp.Replace(Res, "\r")
RegExp.Pattern = "\s"
Res = RegExp.Replace(Res, "\s")
Set RegExp = Nothing
TextToPattern = Res
End Function
Public Function ValidateText(ByVal Text As String, ByVal AllowOnly As Boolean, ByVal Pattern As String) As Boolean
Dim RegExp As Object
Dim Ret As Boolean
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.Global = True
RegExp.Pattern = "[" & IIf(AllowOnly, "^", "") & TextToPattern(Pattern) & "]"
Ret = RegExp.Test(Text)
Set RegExp = Nothing
ValidateText = Not Ret
End Function
</code>Sv: Ej tillåtna tecken och enbart tillåtnat tecken
En fråga till: Ska funktionen bara returnera ett av tecknen som inte är tillåtet i strängen?Sv:Ej tillåtna tecken och enbart tillåtnat tecken
Har haft lite att göra på sistonde.
Thomas: Hur fungerar den kod du skicka? Hur anropar man ValidateText?
Johan Forsberg: Tanken var att functionen skulle returnera True eller False beroende om texten man skrev in inehåller ett otilåtet tecken.Sv: Ej tillåtna tecken och enbart tillåtnat tecken
Glöm detta inlägg, tabbade och råkade trycka mellanslag så att "Spara ändringar" trycktes in.
Inlägget var inte klart att postas.Sv: Ej tillåtna tecken och enbart tillåtnat tecken
<code>
Dim res As Boolean = ValidateText("Text att validera", True, "0123456789abcdef")
</code>
Alltså, funktionen tar emot tre parametrar, där den första är texten du ska validera, den andra om du i tredje parametern angett att du vill enbart tillåta de givna tecknen eller tvärtom, alltså förbjuda. Tredje parametern innehåller då alltså alla tecken i en teckensträng som du vill tillåta/förhindra (beroende på värdet på parameter 2).
Alltså:
- Parameter 2 = True => Tillåt enbart tecken givna i parameter 3.
- Parameter 2 = False => Tillåt enbart tecken som inte finns givna i parameter 3.Sv:Ej tillåtna tecken och enbart tillåtnat tecken
Hoppas det fungerar lika bra i asp.net :DSv: Ej tillåtna tecken och enbart tillåtnat tecken
Set RegExp = CreateObject("VBScript.RegExp")
Set RegExp = Nothing
Kan man modifiera koden så att den funkar i asp.net med?
Vore görbra i så fall :D
Väldigt lätt använd kod.Sv:Ej tillåtna tecken och enbart tillåtnat tecken
Blir ännu mindre kod eftersom en av funktionerna redan finns i .NET...
Kan skriva en .NET version när jag hinner...
Har du för övrigt testat om funktionen fungerar?Sv: Ej tillåtna tecken och enbart tillåtnat tecken
Sv:Ej tillåtna tecken och enbart tillåtnat tecken
<code>
Public Function ValidateText(ByVal Text As String, ByVal AllowOnly As Boolean, ByVal Pattern As String) As Boolean
Return Not System.Text.RegularExpressions.Regex.IsMatch(Text, "[" + IIf(AllowOnly, "^", "") + System.Text.RegularExpressions.Regex.Escape(Pattern) + "]")
End Function
</code>Sv: Ej tillåtna tecken och enbart tillåtnat tecken
mycket enklare än den variant jag kom med.