2011-04-01 77 views
7

我正在從表中讀取字符串ID值。當ID是由用戶輸入的,它是與所述用戶定義的輸入掩碼完成的,所以掩模可能是類似000-00-0000##-######AA-9999999等掩模將由使用者而變化,因此必須在被評估運行。將掩碼應用於字符串

鑑於只有字母數字文本存儲在表中,是什麼產生與面具一個新的字符串應用的最佳方式?

例如:

表值= 「123456789」

如果用戶定義的000-00-0000面具,我想串123-45-6789

如果用戶定義的AA-9999999面具,我想串12-3456789

如果用戶定義的FR999_999999面具,我想串FR123_456789

回答

1

這正是我所需要的。唯一的缺點是它將我與Windows Forms程序集結合在一起。

 MaskedTextBox mtb = new MaskedTextBox("FR999_999999"); 
     mtb.Text = "123456789"; 
     return mtb.Text; 
6

它看起來像蒙版圖案是它會插入掩碼中的每個破折號匹配破折號。如果是這種情況,那麼這應該起作用。

public static string MaskValue(string mask, string value) { 
    var builder = new System.Text.StringBuilder(); 
    var maskIndex = 0; 
    var valueIndex = 0; 
    while (maskIndex < mask.Length && valueIndex < value.Length) { 
    if (mask[maskIndex] == '-') { 
     builder.Append('-'); 
     maskIndex++; 
    } else { 
     builder.Append(value[valueIndex]); 
     maskIndex++; 
     valueIndex++; 
    } 
    } 

    // Add in the remainder of the value 
    if (valueIndex + 1 < value.Length) { 
    builder.Append(value.Substring(valueIndex); 
    } 

    return builder.ToString(); 
} 
+0

問題的很好的詮釋。我不太確定他想要什麼。注意typo:while循環中的'max.Length'。 – 2011-04-01 04:39:15

+0

@Joel,在錯字上抓得很好......修正 – JaredPar 2011-04-01 04:40:08

+0

破折號是最有可能發生的情況,但不是唯一的可能性。請參閱上面編輯的問題,該問題現在包括帶有兩個前導字符和下劃線的掩碼示例。 – PahJoker 2011-04-04 03:15:26