我正在从表中读取字符串ID值。当用户输入ID时,它是由用户定义的输入掩码完成的,因此该掩码可能类似于000-00-0000##-######AA-9999999等。掩码会因用户而异,因此必须在以下位置进行评估运行。

假设表中仅存储字母数字文本,那么应用该掩码生成新字符串的最佳方法是什么?

例如:



如果用户定义了000-00-0000的掩码,我想获取字符串123-45-6789

如果用户定义了AA-9999999的掩码,我想获取字符串12-3456789

如果用户定义了FR999_999999的掩码,我想获取字符串FR123_456789

最佳答案

似乎 mask 图案是它将为 mask 中的每个破折号插入匹配的破折号。如果是这样,那应该可以。

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

09-07 00:56