2011-04-01 20 views
7

Estoy leyendo un valor de ID de cadena de una tabla. Cuando el usuario ingresó la ID, se hizo con una máscara de entrada que el usuario definió, por lo que la máscara podría haber sido algo así como 000-00-0000, ##-######, AA-9999999, etc. La máscara variará según el usuario, por lo que debe evaluarse en tiempo de ejecuciónAplicar máscara a una cadena

Dado que solo el texto alfanumérico se almacena en la tabla, ¿cuál es la mejor forma de generar una nueva cadena con esa máscara aplicada?

Por ejemplo:

valor de la tabla = "123456789"

Si el usuario ha definido máscara de 000-00-0000, quiero llegar cadena 123-45-6789.

Si el usuario ha definido la máscara de AA-9999999, quiero obtener la cadena 12-3456789.

Si el usuario ha definido la máscara de FR999_999999, quiero obtener la cadena FR123_456789.

Respuesta

1

Esto hace exactamente lo que necesito. El único inconveniente es que me ata al ensamblado de Windows Forms.

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

Parece que el patrón de máscara es que insertará guiones coincidentes para cada guión en la máscara. Si ese es el caso, entonces esto debería funcionar.

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

Buena interpretación del problema. No estaba muy seguro de lo que quería. Nota typo: 'max.Length' en tu ciclo while. –

+0

@Joel, buena captura del error tipográfico ... corregido – JaredPar

+0

Los guiones son el escenario más probable, pero no la única posibilidad. Consulte la pregunta editada arriba, que ahora incluye ejemplos de una máscara con dos caracteres principales y un guión bajo. – PahJoker

Cuestiones relacionadas