如何将文本重新格式化为不同的模式?
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>
【讨论】:
以上是关于如何将文本重新格式化为不同的模式?的主要内容,如果未能解决你的问题,请参考以下文章