如何:从字符串中剥离无效字符

下面的示例使用静态 Regex.Replace 方法,从字符串中剥离无效字符。

警告

如果使用 System.Text.RegularExpressions 处理不受信任的输入,则传递一个超时。 恶意用户可能会向 RegularExpressions 提供输入,从而导致拒绝服务攻击。 使用 RegularExpressions 的 ASP.NET Core 框架 API 会传递一个超时。

示例

可以使用此示例中定义的 CleanInput 方法来剥离在接受用户输入的文本字段中输入的可能有害的字符。 在此情况下,CleanInput 会剥离所有非字母数字字符(句点 (.)、at 符号 (@) 和连字符 (-) 除外),并返回剩余字符串。 但是,可以修改正则表达式模式,使其剥离不应包含在输入字符串内的所有字符。

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

正则表达式模式 [^\w\.@-] 与非单词字符、句点、@ 符号或连字符的任何字符相匹配。 单词字符可以是任何字母、十进制数字或标点连接符(如下划线符号)。 与此模式匹配的任何字符被替换为 String.Empty(即替换模式定义的字符串)。 若要允许用户输入中出现其他字符,请将该字符添加到正则表达式模式中的字符类。 例如,正则表达式模式 [^\w\.@-\\%] 还允许输入字符串中包含百分号和反斜杠。

请参阅