【问题标题】:Dataview RowFilter escape invalid charactersDataview RowFilter 转义无效字符
【发布时间】:2011-09-20 03:00:05
【问题描述】:

有没有人有一种方便的现成方法来转义通配符,字符串中的无效字符被分配给RowFilter 用于C# 中的DataView。规则有点像下面

If a column name contains any of these special characters ~ ( ) # \ / = > < + - * % & | ^ ' " 

[ ], you must enclose the column name within square brackets [ ]. If a column name contains 

right bracket ] or backslash \, escape it with backslash (\] or \\).

谢谢:)

【问题讨论】:

    标签: c# asp.net sql datatable dataview


    【解决方案1】:

    这将根据here 中更详细地列出的规范工作

    protected void Page_Load(object sender, EventArgs e)
    {
        CheckValue("fefe[][]12#");
        CheckValue("abvds");
        CheckValue("#");
        CheckValue(@"[][][][][]\\\\\][]");
        CheckValue("^^^efewfew[[]");
    }
    
    public static string CheckValue(string value)
    {
        StringBuilder sBuilder = new StringBuilder(value);
    
        string pattern = @"([-\]\[<>\?\*\\\""/\|\~\(\)\#/=><+\%&\^\'])";
    
        Regex expression = new Regex(pattern);
    
        if (expression.IsMatch(value))
        {
            sBuilder.Replace(@"\", @"\\");
            sBuilder.Replace("]", @"\]");
            sBuilder.Insert(0, "[");
            sBuilder.Append("]");
        }
        return sBuilder.ToString();
    }
    

    我把它扔进了我正在查看的网页中,所以无视 Page_Load,当然也可以随意测试。

    希望对您有所帮助。

    【讨论】:

    • 抱歉,没有,您是否尝试过类似下面的输入 Status = 'TRUE'
    • 根据我对作者问题的理解,它是正确的。他们真正想要的是最后一个右括号,如果它作为名称的一部分添加,则不会被转义。这篇文章csharp-examples.net/dataview-rowfilter 帮助我更好地理解了他们想要什么。我更新了代码以反映这一点。
    • 另请注意,快速监视或监视窗口将显示转义值。如果单击文本可视化器上的放大镜,您将看到实际输出。 'TRUE' 现在返回 ['TRUE']
    • Status = 'TRUE' 返回 [Status = 'TRUE'] 我才意识到你是作者 :) 无论如何,试一试,如果这不符合你的想法帮助我了解问题所在并为您解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多