2

我正在尝试从 asp.net 表单中输入控制字符。例如,我希望用户能够在文本框中输入 \t 并且它是 \t 而不是 \ \t (如果我把它们放在一起,它们中的一个会被转义)。最好的方法是什么?我已经连续盯着它看了很长一段时间,答案并没有突然出现在我身上。谢谢。

更新:

谢谢大家,但我只是回答了自己。

我刚刚在 Regex 中找到了静态 Unescape 方法,所以在我的网络应用程序中我现在正在做:

(其中 tb 是一个 asp.net 文本框)

        var inputText = tb.Text;
        if (inputText.Length == 2)
        {
            var escaped = System.Text.RegularExpressions.Regex.Unescape(inputText);
            if (escaped.Length == 1)
            {
                var character = escaped.ToCharArray()[0];
                if (char.IsControl(character))
                {
                    inputText = character.ToString();
                }
            }
        }
4

3 回答 3

0

谢谢大家,但我只是回答了自己。

我刚刚在 Regex 中找到了静态 Unescape 方法,所以在我的网络应用程序中我现在正在做:

(其中 tb 是一个 asp.net T

        var inputText = tb.Text;
        if (inputText.Length == 2)
        {
            var escaped = System.Text.RegularExpressions.Regex.Unescape(inputText);
            if (escaped.Length == 1)
            {
                var character = escaped.ToCharArray()[0];
                if (char.IsControl(character))
                {
                    inputText = character.ToString();
                }
            }
        }
于 2012-04-29T13:54:32.893 回答
0

我认为您想解析转义字符,例如'\t'. 如果是这样,请使用此辅助方法:

public static char ParseChar(string ch)
{
    char result;

    if (ch[0] != '\\')
        result = ch[0];
    else
    {
        if (ch.Length == 1)
            throw new ArgumentException("Invalid escape sequence '" + ch + "'");

        switch (ch[1])
        {
            case '\'': result = '\''; break;
            case '"': result = '"'; break;
            case '\\': result = '\\'; break;
            case '0': result = '\0'; break;
            case 'a': result = '\a'; break;
            case 'b': result = '\b'; break;
            case 'f': result = '\f'; break;
            case 'n': result = '\n'; break;
            case 't': result = '\t'; break;
            case 'v': result = '\v'; break;

            default:
                throw new ArgumentException(
                    "Invalid escape sequence '" + ch + "'");
        }
    }

    return result;
}
于 2012-04-28T11:56:39.593 回答
0

需要注意的一点是,如果您\t通过调试器查看 true 以直观地查看该值,.net 会自动\\为您编码它,即使它不存在。

也就是说,如果它确实存在,您可以在用户将文本提交到服务器后尝试对其进行搜索和替换:

var newString = stringWithDoubleSlash.Replace("\\\\", "\\");  
// We aren't really looking for 4 slashes, but it appears that way since two of them are escaped
于 2012-04-28T11:57:58.983 回答