0

我有一个视图可以提取数据库中所有内容的列表,并且效果很好。但是,我必须掩盖一点信息,无论我尝试什么,我似乎都无法掩盖它。

我想用 5 * 屏蔽它(不管字符串有多长)并显示最后 4 位数字。

知道用我所拥有的实现这一目标的最佳方法吗?

字符串示例:"SD46346" && "ADFF3342422" && "56-AS4566S"

控制器

    vm.Accounts = accounts
        .Select(s => new AdminViewModel.Account
        {
            Id= (s._ID.Length > 40 ? Encryptor.Decrypt(s._ID) : s._ID),
        }).ToList();
    return View(vm);

视图模型

public List<Account> Accounts { get; set;}

public class Account
{
    public string Id { get; set; }
}

我尝试过的事情:“/xxxxx”应用程序中的服务器错误。StartIndex 不能小于零。参数名称:startIndex –</p>

public string DisplayID
{
    get
    {
        return string.Format("*****{0}", Id.Substring(Id.Length - 4));
    }
} 

更新

这不是我的代码,而是数据库中丢失的旧数据,只有 2 个字符。

4

3 回答 3

1

对于您的要求,这可能有点矫枉过正。但这里有一个快速的扩展方法可以做到这一点。

它默认使用 x 作为掩码字符,但可以使用可选字符进行更改

查看模型

string ID {get;set;}

string DisplayID 
{
    get
    {
        ID.MaskAllButLast(4,'*');
    }
}

扩展方法

   public static class Masking
{
    public static string MaskAllButLast(this string input, int charsToDisplay, char maskingChar = 'x')
    {
        int charsToMask = input.Length - charsToDisplay;
        return charsToMask > 0 ? $"{new string(maskingChar, charsToMask)}{input.Substring(charsToMask)}" : input;
    }
}

这应该没有错误,并且对于短 ID 不会出错。它还将完全显示一个简短的 ID,因此需要权衡。

于 2019-06-17T05:28:00.327 回答
0

不确定我是否理解字符串(双引号和 & 符号),但您应该能够根据需要修改代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "SD46346\" && \"ADFF3342422\" && \"56-AS4566S";
            string pattern = @"\d{4}";  //exactly four digits in a row
            Match match = Regex.Match(input, pattern, RegexOptions.RightToLeft);

            string output = match.Value;
        }
    }
}
于 2017-06-03T18:20:04.367 回答
0

如果您只是简单地替换显示,您还可以添加一个用于显示目的的额外属性。

string ID {get;set;}

string DisplayID 
{
    get
    {
        return string.Format("*****{0}", ID.substring(ID.Length - 4))
    }
}
于 2017-06-03T18:11:23.840 回答