2012-04-28 50 views
2

我試圖從asp.net窗體輸入一個控制字符。例如,我希望用戶能夠在文本框中輸入\ t,而不是\ t(如果我將它們放在一起,則其中的一個會被轉義)。用這個最好的方法是什麼?我一直在盯着它持續了很長一段時間,答案並沒有跳出來。謝謝。如何從asp.net輸入 t

更新:

謝謝你們,但我只是回答自己。

我剛剛在正則表達式中找到的靜態UNESCAPE方法,所以在我的web應用程序,我現在做的:

(其中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(); 
       } 
      } 
     } 
+1

我不能回答我自己還在SO上,但我找到了答案,它的正則表達式是靜態的Unescape方法。var escaped = System.Text.RegularExpressions.Regex.Unescape(inputText); – 2012-04-28 12:16:51

回答

0

謝謝你們,但我剛纔已經回答我。

我剛剛在正則表達式中找到的靜態UNESCAPE方法,所以在我的web應用程序,我現在做的:

(其中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(); 
       } 
      } 
     } 
0

我想你想要解析像'\t'這樣的逃逸字符。如果是用這個helper方法:

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; 
} 
0

有一點需要注意的是,如果你是通過調試器尋找一個真正的\t直觀地看到價值,.NET會自動用\\爲你進行編碼,即使盡管它不在那裏。

也就是說,如果它確實是存在的,你可以嘗試做一個搜索和替換它的用戶提交的文本到服務器後:

var newString = stringWithDoubleSlash.Replace("\\\\", "\\"); 
// We aren't really looking for 4 slashes, but it appears that way since two of them are escaped