

/*
* 将回车换行分开比较好
* update date:2009-01-01
* */
/// <summary>
/// 回车
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string Return(string input)
{
input = Regex.Replace(input, "(?:\\\\)*(?:\r)", "\\r");
return input;
}
/// <summary>
/// 换行
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string NewLine(string input)
{
input = Regex.Replace(input, "(?:\\\\)*(?:\n)", "\\n");
return input;
}
回车换行测试:


protected void Page_Load(object sender, EventArgs e)
{
string s = "0\r1\\r2\\\r3\\\\r4\\\\\r5\\\\\\r6\\\\\\\r7\\\\\\\\r8\\\\\\\\\r9\\\\\\\\\\r10\\\\\\\\\\\r11\\\\\\\\\\\\r12\\\\\\\\\\\\\r13";
s = rep(s);
s = string.Format("alert('{0}')", s);
ClientScript.RegisterStartupScript(this.GetType(), "alert", s, true);
}
测试结果:
方法1:


---------------------------
Windows Internet Explorer
---------------------------
01
23\r45\
67\\r89\\
1011\\\r1213
---------------------------
确定
---------------------------
方法2:


---------------------------
Windows Internet Explorer
---------------------------
0
1
23\r4
5\
6\7\\r8
9\\
10\\11\\\r12
13
---------------------------
确定
---------------------------
回车换行方法2:


/*** Method 2 *****
* update date: 2009-01-01
*
* author:joe.yang
*
* */
/// <summary>
/// 回车 换行
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public string rep(string input)
{
string pattern = @"(?:\\)*(?<rn>\r|\n)";
input = Regex.Replace(input, pattern, new MatchEvaluator(ReturnOrNewLine));
return input;
}
public string ReturnOrNewLine(Match m)
{
// if the length of m.Value is equal 1, 3, 5, 7, 9,

// such as "\r", "\\\\\r", "\\\\\\\\\r",

// the count of \ is equal 1, 5, 9,

if (m.Value.Length % 2 == 1)
{
if (m.Groups["rn"].Value == "\r")
{
return "\\r";
}
return "\\n";
}
return m.Value;
}
回车换行方法1:


/*
* 对于C#中的回车要进行转义
* 而对于VB.NET中的回车换行不用转义不会有问题
* update date 2008-12-30
* author:joe.yang
*
* */
/// <summary>
/// 回车 换行
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string rep(string input)
{
input = Regex.Replace(input, "(?:\\\\)*(\r|\n)", "\\$1");
return input;
}
2008-12-25更新中的回车换行正则有问题


/************************************
usage : C#转义asp.net中特殊字符
author: Joe-yang
update date: 2008-12-25
***********************************/
using System;
using System.Text.RegularExpressions;
/// <summary>
/// Summary description for TransferSpecLetters
/// </summary>
public class TransferSpecLetters
{
public TransferSpecLetters()
{
//
// TODO: Add constructor logic here
//
}
/// <summary>
/// 过滤特殊字符
/// </summary>
public static string ReplaceSpecialText(string input)
{
input = ReplaceText(input);
input = ReplaceSingleQuote(input);
input = ReplaceHexXCode(input);
input = ReplaceHexUCode(input);
input = ReplaceOctalCode(input);
return input;
}
/// <summary>
/// 回车 换行
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string ReplaceText(string input)
{
string pattern = @"(?:\\)+(?=[rn])";
return Regex.Replace(input, pattern, @"\");
}
/// <summary>
/// 单引号
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string ReplaceSingleQuote(string input)
{
string pattern = @"\\*'";
return Regex.Replace(input, pattern, @"\'");
}
/// <summary>
/// \xnn 16进制
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string ReplaceHexXCode(string input)
{
string pattern = @"(\\)+x(?=[0-9a-fA-F]{0,1}([^0-9a-fA-F]|$))";
return Regex.Replace(input, pattern, @"\\x");
}
/// <summary>
/// \unnnn 16进制
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string ReplaceHexUCode(string input)
{
string pattern = @"(\\)+u(?=[0-9a-fA-F]{0,3}([^0-9a-fA-F]|$))";
return Regex.Replace(input, pattern, @"\\u");
}
/// <summary>
/// 8进制 \0nnn
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string ReplaceOctalCode(string input)
{
string pattern = @"(\\)+0(?=[0-7]{0,2}([^0-7]|$))";
return Regex.Replace(input, pattern, @"\\0");
}
}
-----


''' <summary>
''' VB.NET 2005
''' 过滤特殊字符
''' author: joe-yang
''' create date: 2008-11-16
''' </summary>
''' <remarks></remarks>
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim alert As String
Dim input As String
'input = "qq \\\\\\\\\\ndnaaa\ra" 'Newline and Carriage return
'input = "qq''''\''\\\\\\\\\\\'dnaaaa" 'Single quote
'input = "d:\upload\files" 'hexadecimal
input = "d:\092221F73pload\files" 'hexadecimal
alert = replaceHex8(input)
alert = String.Format("alert('{0}')", alert)
Me.Page.ClientScript.RegisterStartupScript(Me.GetType(), "alert", alert, True)
End Sub
''' <summary>
''' Newline and Carriage return
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Private Function ReplaceText(ByVal input As String) As String
Dim pattern As String
pattern = "(?:\\)+(?=[rn])"
Return Regex.Replace(input, pattern, "\")
End Function
''' <summary>
''' Single quote
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Private Function ReplaceSingleQuote(ByVal input As String) As String
Dim result As String
Dim pattern As String
pattern = "(?:\\)*(?=['])"
result = Regex.Replace(input, pattern, "\")
Return result.Replace("\\", "\")
End Function
''' <summary>
''' A character represented by hexadecimal code nn
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Private Function ReplaceHexXCode(ByVal input As String) As String
Dim pattern As String
'不匹配 \xnn 16进制
'A character represented by hexadecimal code nn (where n is a hexadecimal digit 0-F)
pattern = "(\\)+x(?=$|[0-9a-fA-F]{0,1}[^0-9a-fA-F])"
Return Regex.Replace(input, pattern, "\\x")
End Function
''' <summary>
''' A Unicode character represented by hexadecimal code
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Private Function ReplaceHexUCode(ByVal input As String) As String
Dim pattern As String
'不匹配 \unnnn 16进制
'A Unicode character represented by hexadecimal code nnnn (where n is a hexadecimal digit 0-F)
pattern = "(\\)+u(?=$|[0-9a-fA-F]{0,3}[^0-9a-fA-F])"
Return Regex.Replace(input, pattern, "\\u")
End Function
Private Function replaceHex8(ByVal input As String) As String
Dim pattern As String
pattern = "(\\)+0(?=$|[0-7]{0,2}[^0-7])"
'不匹配8进制 \0nnn,则转义反斜杠
'A character represented by octal code nnn (where n is an octal digit 0-7)
'由于8进制,若不匹配,则后面的字符都会被截断,故需替换
Return Regex.Replace(input, pattern, "\\0")
End Function
End Class