问题:过滤数据中的敏感信息。
解决:正则表达式筛选敏感信息--》替换敏感信息。
代码:
/// <summary>
/// 修改错误返回的描述内容
/// </summary>
/// <param name="redata">返回的Json</param>
/// <returns></returns>
public static string ChangeError(string redata)
{
string restr = redata;
#region 合法性验证
//Regex()的第一个参数是正则表达式
Regex reg = new Regex("\"RESULT_CODE\":\"1\"", RegexOptions.IgnoreCase);//操作失败
//Match()的第一个参数是需要匹配的字段
Match match = reg.Match(redata);
Regex reg_s = new Regex("\"RESULT_DESC\":\"\\*\\S*\\*", RegexOptions.IgnoreCase);//可显示的描述
Match match_s = reg_s.Match(redata);
//Captures:所有匹配的集合
//Count:集合数量
if (match.Captures.Count > 0)
{
if (match_s.Captures.Count == 0)//修改敏感信息
{
Regex reg_r = new Regex("\"RESULT_DESC\":\".*?\"", RegexOptions.IgnoreCase);
//Replace替换所有匹配的字段
//第一个参数:需要匹配的字段
//第二个参数:正则表达式
//第三个参数:替换文本,即用该文本替换掉匹配的字段
restr = Regex.Replace(redata, "\"RESULT_DESC\":\".*?\"", "\"RESULT_DESC\":\"操作失败\"", RegexOptions.IgnoreCase);
}
else//取消“*”,因为在返回信息中带在“*”中间的信息是可以显示的,如“*XXX*”。
{
string desc = match_s.Groups[0].Value.ToUpper().Replace("*", "");
restr = Regex.Replace(redata, "\"RESULT_DESC\":\"\\*\\S*\\*", desc, RegexOptions.IgnoreCase);
}
}
#endregion
return restr;
}
PS:MatchCollection是所有匹配成功的集合。Match是单个。