如何:从字符串中剥离无效字符
下面的示例使用静态 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\.@-\\%]
还允许输入字符串中包含百分号和反斜杠。