过滤javascript中警告信息的特殊字符

本文介绍使用C#处理字符串中的回车和换行符的方法,包括两种不同的实现方式,并提供详细的代码示例。此外,还涉及了特殊字符的转义处理。

 

ContractedBlock.gifExpandedBlockStart.gifCode
/*
     * 将回车换行分开比较好
     * 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;
    }

 

 

 

回车换行测试:

 

ContractedBlock.gifExpandedBlockStart.gifCode
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:

ContractedBlock.gifExpandedBlockStart.gifCode
---------------------------
Windows Internet Explorer
---------------------------
01
23\r45\
67\\r89\\
1011\\\r1213
---------------------------
确定   
---------------------------

 

 

方法2:

ContractedBlock.gifExpandedBlockStart.gifCode
---------------------------
Windows Internet Explorer
---------------------------
0
1
23\r4
5\
6\7\\r8
9\\
10\\11\\\r12
13
---------------------------
确定   
---------------------------


 

 

 

回车换行方法2:

ContractedBlock.gifExpandedBlockStart.gifCode
 /*** 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, n, n + 2
        
// such as "\r", "\\\\\r", "\\\\\\\\\r", .
        
// the count of \ is equal 1, 5, 9,  n, n + 4
        if (m.Value.Length % 2 == 1)
        {
            
if (m.Groups["rn"].Value == "\r")
            {
                
return "\\r";
            }
            
return "\\n";
        }
        
return m.Value;
    }

 

 

回车换行方法1:

ContractedBlock.gifExpandedBlockStart.gifCode
/*
     * 对于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更新中的回车换行正则有问题

 

ContractedBlock.gifExpandedBlockStart.gifCode
/************************************
 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");
    }
}

 

 

-----

 

ContractedBlock.gifExpandedBlockStart.gifCode
''' <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 ObjectByVal 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 StringAs 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 StringAs 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 StringAs 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 StringAs 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 StringAs 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

转载于:https://www.cnblogs.com/joe-yang/archive/2008/11/16/1334512.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值