2011-04-01 79 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