您的位置:首页 > Web前端 > JavaScript

javascript在alert之前转义单引号

2010-01-14 19:51 369 查看
对于1个单引号,则转义该单引号
对于1个反斜杠跟1个单引号,则不管它。
对于2个及以上的反斜杠加一个单引号,则分别对每个反斜杠和单引号都进行转义,即 使反斜杠数目保持不变, 并转义单引号。

/// <summary>
/// 对于单引号而言,若前面有偶数个反斜杠则异常,奇数个反斜杠则正常
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private string ReplaceQuote(string input)
{
string pattern = @"(?://)*(?=['])";
return Regex.Replace(input, pattern, new MatchEvaluator(ReplaceText));
}

// 匹配项
public string ReplaceText(Match m)
{
string str = m.Value;
if (str.Length == 0)
{
// 只有单引号,则转义该单引号
return str + @"/";
}
else if(str.Length == 1)
{
// 1个反斜杠加一个单引号,则不替换
return string.Empty;
}
// 对于大于2个长度的反斜杠,则返回原来的2倍
// 即 使把每个反斜杠都转义了。
return new string('//', 2 * str.Length);
}

protected void Page_Load(object sender, EventArgs e)
{

// 测试代码
string strText = @"'a/'b//'c///'d////'";
System.Diagnostics.Stopwatch swt = new System.Diagnostics.Stopwatch();
swt.Start();
strText = ReplaceQuote(strText);
swt.Stop();
Response.Write("替换使用了毫秒数:" + swt.ElapsedMilliseconds.ToString());
string strAlert = string.Format("alert('{0}')", strText);
ClientScript.RegisterStartupScript(this.GetType(), "alert", strAlert, true);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: