Применить маску к строке

Я читаю значение идентификатора строки из таблицы. Когда 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;