如何将文本重新格式化为不同的模式?

Posted

技术标签:

【中文标题】如何将文本重新格式化为不同的模式?【英文标题】:How do I reformat text into a different pattern? 【发布时间】:2020-05-11 00:27:36 【问题描述】:

如何编写代码以将这种 BBBBB-AAA 模式更改为 0AAABBBBB?我正在使用 asp.net、vb.net 和 jQuery。

加拿大银行账户路由号码的格式:

支票上显示的加拿大路由号码需要重新格式化 电子支付不同。如果检查显示路由 编号为 BBBBB-AAA(其中 AAA 表示金融机构和 BBBBB 是分支),那么必须将路由号更改为 0AAABBBBB 以电子方式处理付款。例如,如果一个 来自蒙特利尔银行开出的账户的支票显示 路由号码 00011-001,那么该号码需要是 重新格式化为 000100011 以电子方式付款 已处理。

我在我的.aspx 页面上从用户这里获取数据:

<input id="txtBankCode" maxlength="9" required="required" />

我在我的 jQuery .js 页面上获取数据:

var bankCode = $("#txtBankCode").val()

我需要将bankCode 重新排列为0AAABBBBB 而不是BBBBB-AAA 的格式。我猜有些用户不会输入破折号,而有些用户会。我该怎么做?

【问题讨论】:

鉴于不依赖数字中的破折号的要求,您可以使用正则表达式解决此问题。我建议首先弄清楚你是否想在 VB 或 JS 中执行此操作(因为两者都是可能的),然后研究正则表达式 【参考方案1】:

鉴于连字符是可选的,您不能依赖它的存在来拆分字符串。因此,另一种解决方案是使用正则表达式根据其输入格式重新组织字符串。试试这个:

这是一个 JS 解决方案:

var bankCode = 'BBBBB-AAA';
bankCode = bankCode.replace(/^(\w5)-?(\w3)$/, '0$2$1');

console.log(bankCode);

在 VB 中也是同样的逻辑:

Dim bankCode As String = "BBBBB-AAA"
bankCode = Regex.Replace(bankCode, "^(\w5)-?(\w3)$", "0$2$1")

Console.WriteLine(bankCode)

【讨论】:

【参考方案2】:

编辑 我想我误解了您对可选破折号的评论。因此,拆分在这里不起作用,因为它需要存在破折号。所以你需要首先通过删除破折号来清理字符串,然后使用子字符串或正则表达式重新排列它:

bankCode = bankCode.replace(/-/g, '');
const first = bankCode.substring(0,5);
const second = bankCode.substring(5);
bankCode = `0$second$first`;

【讨论】:

I am guessing some users will not type the dash while some users will @RoryMcCrossan 啊,我想我误认为只有在用户包含破折号时才需要转换。一秒钟,我会相应地编辑答案。【参考方案3】:

试试这个。

function show() 
    var bankCode = $("#txtBankCode").val();
    console.log(bankCode.replace(/([a-zA-Z]5)-?([a-z-A-Z]3)/, `0$2$1`));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="txtBankCode" maxlength="9" required="required" />
<button type="button" onclick="show()">Show</button>

【讨论】:

以上是关于如何将文本重新格式化为不同的模式?的主要内容,如果未能解决你的问题,请参考以下文章

将对象数组重新格式化为键数组

自动将冗长的 Java 代码重新格式化为 80 列并且仍然可以编译? [复制]

将动态范围的数据格式化为文本

如何通过添加零将文本数据格式化为 6 个字符?

将文本格式化为数字的 SQLplus 脚本

如何使用 ISO 8601 格式的 DateTime 字段将 JSON 文本反序列化为 BsonDocument?