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 , RegularExpressionspowodują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.

Zobacz też