Porady: usuwanie nieprawidłowych znaków z ciągów
W poniższym przykładzie użyto metody statycznej Regex.Replace , aby usunąć nieprawidłowe znaki z ciągu.
Ostrzeżenie
W przypadku używania System.Text.RegularExpressions metody do przetwarzania niezaufanych danych wejściowych należy przekazać limit czasu. Złośliwy użytkownik może przekazać dane wejściowe , RegularExpressions
powodując atak typu "odmowa usługi". ASP.NET podstawowe interfejsy API platformy, które używają RegularExpressions
przekroczenia limitu czasu.
Przykład
Możesz użyć metody zdefiniowanej CleanInput
w tym przykładzie, aby usunąć potencjalnie szkodliwe znaki wprowadzone w polu tekstowym, które akceptuje dane wejściowe użytkownika. W takim przypadku CleanInput
usuwa wszystkie znaki nieliczbowe z wyjątkiem kropek (.), w symbolach (@) i łącznikach (-) i zwraca pozostały ciąg. Można jednak zmodyfikować wzorzec wyrażenia regularnego, tak aby usuwał wszelkie znaki, które nie powinny być uwzględniane w ciągu wejściowym.
using System;
using System.Text.RegularExpressions;
public class Example
{
static string CleanInput(string strIn)
{
// Replace invalid characters with empty strings.
try {
return Regex.Replace(strIn, @"[^\w\.@-]", "",
RegexOptions.None, TimeSpan.FromSeconds(1.5));
}
// If we timeout when replacing invalid characters,
// we should return Empty.
catch (RegexMatchTimeoutException) {
return String.Empty;
}
}
}
Imports System.Text.RegularExpressions
Module Example
Function CleanInput(strIn As String) As String
' Replace invalid characters with empty strings.
Try
Return Regex.Replace(strIn, "[^\w\.@-]", "")
' If we timeout when replacing invalid characters,
' we should return String.Empty.
Catch e As RegexMatchTimeoutException
Return String.Empty
End Try
End Function
End Module
Wzorzec [^\w\.@-]
wyrażenia regularnego pasuje do dowolnego znaku, który nie jest znakiem słowa, kropką, symbolem @ lub łącznikiem. Znak wyrazu to dowolna litera, cyfra dziesiętna lub łącznik interpunkcyjny, taki jak podkreślenie. Każdy znak zgodny z tym wzorcem jest zastępowany przez String.Empty, który jest ciągiem zdefiniowanym przez wzorzec zastępczy. Aby zezwolić na dodatkowe znaki w danych wejściowych użytkownika, dodaj te znaki do klasy znaków we wzorcu wyrażenia regularnego. Na przykład wzorzec [^\w\.@-\\%]
wyrażenia regularnego umożliwia również symbol procentowy i ukośnik odwrotny w ciągu wejściowym.