Javascript 根据长度设置数字字符串的格式
在我的模型中,我有一个cNumber字符串,它可以是不同的长度(16、24和28),我需要在表中的视图中相应地格式化它Javascript 根据长度设置数字字符串的格式,javascript,c#,asp.net-mvc,razor,Javascript,C#,Asp.net Mvc,Razor,在我的模型中,我有一个cNumber字符串,它可以是不同的长度(16、24和28),我需要在表中的视图中相应地格式化它 16 length: ########-######## 24 : ########-########-######## 28 : #### #### #### #### #### #### #### static string Format(string cNumber) { if
16 length: ########-########
24 : ########-########-########
28 : #### #### #### #### #### #### ####
static string Format(string cNumber)
{
if (cNumber.Length == 16 || cNumber.Length == 24)
{
cNumber= Regex.Replace(cNumber, ".{8}", "$0-");
}
else if (cNumber.Length == 28)
{
cNumber= Regex.Replace(cNumber, ".{4}", "$0 ");
}
else
{
return cNumber;
}
cNumber= cNumber.Remove(cNumber.Length - 1);
return cNumber;
}
public ActionResult Index(Guid id)
{
var PartnerCNumbers = db.PartnerCNumbers.Include(p => p.Partner).Where(p=>p.Partner.PartnerGuid == id);
var cNumList = new List<string>();
foreach (var cn in PartnerCNumbers)
{
cNumList.Add(Format(cn.cNumber));
}
ViewData["cNumbers"] = cNumList;
ViewBag.PartnerGuid = id;
return View(PartnerCNumbers.ToList());
}
更新:我确实有一个格式化方法,但我很难将它传递给视图,以显示在表的正确记录中
16 length: ########-########
24 : ########-########-########
28 : #### #### #### #### #### #### ####
static string Format(string cNumber)
{
if (cNumber.Length == 16 || cNumber.Length == 24)
{
cNumber= Regex.Replace(cNumber, ".{8}", "$0-");
}
else if (cNumber.Length == 28)
{
cNumber= Regex.Replace(cNumber, ".{4}", "$0 ");
}
else
{
return cNumber;
}
cNumber= cNumber.Remove(cNumber.Length - 1);
return cNumber;
}
public ActionResult Index(Guid id)
{
var PartnerCNumbers = db.PartnerCNumbers.Include(p => p.Partner).Where(p=>p.Partner.PartnerGuid == id);
var cNumList = new List<string>();
foreach (var cn in PartnerCNumbers)
{
cNumList.Add(Format(cn.cNumber));
}
ViewData["cNumbers"] = cNumList;
ViewBag.PartnerGuid = id;
return View(PartnerCNumbers.ToList());
}
静态字符串格式(字符串编号)
{
如果(cNumber.Length==16 | | cNumber.Length==24)
{
cNumber=Regex.Replace(cNumber,“{8}”,“$0-”;
}
else if(cNumber.Length==28)
{
cNumber=Regex.Replace(cNumber,“{4}”,即“$0”);
}
其他的
{
返回cNumber;
}
cNumber=cNumber.Remove(cNumber.Length-1);
返回cNumber;
}
公共操作结果索引(Guid id)
{
var PartnerCNumbers=db.PartnerCNumbers.Include(p=>p.Partner)。其中(p=>p.Partner.PartnerGuid==id);
var cNumList=新列表();
foreach(合伙人编号中的var cn)
{
cNumList.Add(格式(cn.cNumber));
}
ViewData[“cNumbers”]=cNumList;
ViewBag.PartnerGuid=id;
返回视图(PartnerCNumbers.ToList());
}
在我的视图中,ViewData是一个列表
@model IEnumerable<Models.PartnerCNumbers>
IEnumerable<string> cNumbers= ViewData["cNumbers"] as IEnumerable<string>;
@foreach (var item in Model)
{
//int cLength = item.cNumber.Length;
<tr>
<td>
@Html.DisplayFor(modelItem => item.Currency)
</td>
<td>
//@Html.DisplayFor(modelItem => item.cNumber)
//THIS IS WHERE I NEED THE FORMATTED cNUMBER
</td>
<td>
@Html.DisplayFor(modelItem => item.sCode)
</td>
</tr>
}
@model IEnumerable
IEnumerable cNumbers=视数据[“cNumbers”]为IEnumerable;
@foreach(模型中的var项目)
{
//int cLength=item.cNumber.Length;
@DisplayFor(modelItem=>item.Currency)
//@DisplayFor(modeleItem=>item.cNumber)
//这是我需要格式化的cNUMBER的地方
@DisplayFor(modeleItem=>item.sCode)
}
哪种方法最好?我在视图本身中尝试了String.Format(),但无法转换它,因为它已作为字符串存储在数据库中。
例如,根据长度属性,ViewModel是否可以具有不同的注释?或者,使用javascript是否可能?我会为这种类型的“自定义ToString”创建一个扩展方法
除非每秒调用该函数数千次,“最快的方式”不一定是最好的。您可以根据需要使用C#中的以下帮助函数按长度格式化输入字符串:
class Program
{
static string formatByLength(string s)
{
if (s.Length == 16)
{
return s.Substring(0, 8) + "-" + s.Substring(8);
}
if (s.Length == 24)
{
return s.Substring(0, 8) + "-" + s.Substring(8, 8) + "-" + s.Substring(16);
}
if (s.Length == 28)
{
var sb = new System.Text.StringBuilder();
for (var i = 0; i < 7; i++)
{
if (sb.Length > 0)
{
sb.Append(" ");
}
sb.Append(s.Substring(i * 4, 4));
}
return sb.ToString();
}
// return original string
return s;
}
static void Main(string[] args)
{
Console.WriteLine(formatByLength("1234567890123456"));
Console.WriteLine(formatByLength("123456789012345678901234"));
Console.WriteLine(formatByLength("1234567890123456789012345678"));
}
}
我将构建一个方法,以获取具有n个固定长度段的字符串长度,然后在以下两者之间插入分隔符:
private static string FormatNumberString(string input, int segmentLength, char delimiter)
{
StringBuilder builder = new StringBuilder();
// In a 16-length string, i will initially be 0, and then on the next
// iteration of the loop it will be 8
for (int i = 0; i < input.Length; i += segmentLength)
{
// if we're just starting another block we should add the delimiter
if (i != 0)
{
builder.Append(delimiter);
}
// add the section from i to i + segmentLength (e.g. 0-7 and then 8-15)
builder.Append(input.Substring(i, segmentLength));
}
return builder.ToString();
}
用法:
Console.WriteLine(FormatNumberStringByLength("1234567812345678"));
Console.WriteLine(FormatNumberStringByLength("123456781234567812345678"));
Console.WriteLine(FormatNumberStringByLength("1234123412341234123412341234"));
您应该在foreach循环中使用cNumbers而不是模型
IEnumerable<string> cNumbers= ViewData["cNumbers"] as IEnumerable<string>;
@foreach (var cNumber in cNumbers)
{
<tr>
<td>
//other model data
</td>
<td>
@cNumber
</td>
<td>
//other model data
</td>
</tr>
}
IEnumerable cNumbers=ViewData[“cNumbers”]作为IEnumerable;
@foreach(变量cNumber,单位为cNumbers)
{
//其他模型数据
@编号
//其他模型数据
}
IEnumerable<string> cNumbers= ViewData["cNumbers"] as IEnumerable<string>;
@foreach (var cNumber in cNumbers)
{
<tr>
<td>
//other model data
</td>
<td>
@cNumber
</td>
<td>
//other model data
</td>
</tr>
}