Применить маску к строке
Я читаю значение идентификатора строки из таблицы. Когда ID был введен пользователем, это было сделано с маской ввода, определенной пользователем, поэтому маска могла быть чем-то вроде 000-00-0000
, ##-######
, AA-9999999
, etc. Маска будет отличаться от пользователя и поэтому должна оцениваться во время выполнения.
учитывая, что в таблице хранится только буквенно-цифровой текст, каков наилучший способ генерации новой строки с этой маской?
например:
табличное значение = "123456789"
если пользователь определил маски 000-00-0000
, Я хочу получить строку 123-45-6789
.
если пользователь определил маски AA-9999999
, Я хочу получить строку 12-3456789
.
если пользователь определил маски FR999_999999
, Я хочу получить строку FR123_456789
.
2 ответов
похоже, что шаблон маски заключается в том, что он будет вставлять соответствующие тире для каждой тире в маске. Если это так, то это должно работать.
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();
}
Это именно то, что мне нужно. Единственным недостатком является то, что он привязывает меня к сборке Windows Forms.
MaskedTextBox mtb = new MaskedTextBox("FR999_999999");
mtb.Text = "123456789";
return mtb.Text;