如何掩盖字符串?

时间:2012-03-14 16:27:40

标签: c# string string-formatting masking

我有一个值为#34; 1131200001103"。

的字符串

如何以此格式将其显示为字符串" 11-312-001103"使用Response.Write(value)?

由于

6 个答案:

答案 0 :(得分:14)

您不想只使用Substring

string dashed = text.Substring(0, 2) + "-" +
                text.Substring(2, 3) + "-" +
                text.Substring(7);

或者:

string dashed = string.Format("{0}-{1}-{2}", text.Substring(0, 2),
                              text.Substring(2, 3), text.Substring(7));

(我假设你故意错过了0中的两个?不清楚哪个 0s,不可否认......)

显然你应该首先验证字符串是否正确...

答案 1 :(得分:13)

这会产生所需的结果

string result = Int64.Parse(s.Remove(5,2)).ToString("00-000-000000");

假设您要在2个第一个空值的位置删除2个字符。

答案 2 :(得分:6)

您可以尝试使用正则表达式并将其放在扩展方法ToMaskedString()

public static class StringExtensions
{
    public static string ToMaskedString(this String value)
    {
        var pattern = "^(/d{2})(/d{3})(/d*)$";
        var regExp = new Regex(pattern);
        return regExp.Replace(value, "$1-$2-$3");
    }
}

然后致电

respne.Write(value.ToMaskedString());

答案 3 :(得分:3)

也许像

string result = str.SubString(0, 2) + "-" + str.SubString(2, 3) + "-" + str.SubString(7);

str是“11312000011103”字符串

答案 4 :(得分:0)

我写了一个用于相同/相似目的的快速扩展方法(从某种意义上说,没有办法跳过字符)

用法:

var testString = "12345";
var maskedString = testString.Mask("##.## #"); // 12.34 5

方法:

public static string Mask(this string value, string mask, char substituteChar = '#')
{
    int valueIndex = 0;
    try
    {
        return new string(mask.Select(maskChar => maskChar == substituteChar ? value[valueIndex++] : maskChar).ToArray());
    }
    catch (IndexOutOfRangeException e)
    {
        throw new Exception("Value too short to substitute all substitute characters in the mask", e);
    }
}

答案 5 :(得分:0)

我补充了@ESipalis 的回答

扩展方法接受要替换的字符数组

public static string Mask(this string value, string mask, char[] substituteChar)
  {
     int valueIndex = 0;
     try
     {
        return new string(mask.Select(maskChar => substituteChar.Contains(maskChar) ? value[valueIndex++] : maskChar).ToArray());
     }
     catch (IndexOutOfRangeException e)
     {
        return "#ERROR";
     }
  }

你可以拨打分机:

yourString.Mask("AAA-999(SSS)","AS9".ToArray())
相关问题