2

asp.netフォームから制御文字を入力しようとしています。たとえば、ユーザーがテキストボックスに\ tを入力できるようにしたいのですが、\ \ tではありません(それらを組み合わせると、そのうちの1つがエスケープされるためスペースがあります)。これを行うための最良の方法は何ですか?私はかなり長い間それを絶えず見つめていました、そして答えは私に飛び出していません。ありがとう。

アップデート:

みんなありがとう、でも私は自分自身に答えたところです。

正規表現で静的なUnescapeメソッドを見つけたので、Webアプリで次のことを実行しています。

(tbはasp.net TextBoxです)

        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

のようなエスケープ文字を解析したいと思います'\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注意すべき点の1つは、デバッガーで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 に答える
0

みんなありがとう、でも私は自分自身に答えたところです。

正規表現で静的なUnescapeメソッドを見つけたので、Webアプリで次のことを実行しています。

(ここで、tbはasp.netTです。

        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 に答える