2012-03-14 121 views
2

我有一个值为“1131200001103”的字符串。如何掩盖字符串?

如何使用Response.Write(value)以“11-312-001103”格式显示它为字符串?

感谢

+0

可能的Dup - http://stackoverflow.com/questions/5509172/apply-mask-to-a-string – 2012-03-14 16:30:23

+0

和你正在寻找完成什么?因为那件事可以用子串和连接来完成 – gbianchi 2012-03-14 16:32:30

+0

请仔细阅读,这不是一个重复。 – mko 2012-03-14 16:32:39

回答

10

这将产生所需的结果

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

假设您想在2个第一个空值的位置丢弃2个字符。

+0

与字符串掩码数字非常好。 – ppumkin 2013-09-10 21:16:08

11

你不想只是使用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的目前尚不清楚其中 0,无可否认...?)

显然你应该验证字符串是正确的长度第一...

+0

和OP根据他的评论寻找更好的解决方案..是否有更好的解决方案? – gbianchi 2012-03-14 16:37:42

+0

我很欣赏Jon的回答,这与我的解决方案几乎完全相同。奥利弗的解决方案也是一个很好的解决方案。我只是想看看有没有类似于文本框掩模的掩模解决方案。 – mko 2012-03-14 17:13:22

+0

@Jon两个0都是故意的。我实际上掩盖了第三方响应代码,但我猜想8位数字对于他们的文档来说太多了。他们在文档中使用1131200001103作为原始响应和11-312-001103。 – mko 2012-03-14 17:16:20

2

你可以尝试一个正则表达式,并把它放在一个扩展方法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()); 
+0

ToMaskedString返回一个int? – gbianchi 2012-03-14 16:40:58

+0

它不应该是“^(/ d {2})(/ d {3})(/ d {2})(/ d *)$”和“$ 1- $ 2- $ 4” 0? – 2012-03-15 14:12:34

2

也许像

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

STR作为 “11312000011103” 串