使用 ReplaceNoCase() ColdFusion 删除 <cfoutput> 中的字符
Remove characters in <cfoutput> with ReplaceNoCase() ColdFusion
我需要显示格式类似于此的数据记录的输出:XXXX:12345 (Xxxxxxxxx)
但是,我想要输出的唯一数据是“12345”和前面两个零,即输出应该类似于“0012345”。记录中的“12345”仅为示例,每条记录都分配有唯一编号。示例记录如下所示:CAST:98765 (RPOS1234-XY)
我可以使用 ReplaceNoCase() 仅从记录中提取该数据吗?如果是这样,我将如何编写代码来删除不需要的字符?
它不使用 replaceNoCase,但根据您的评论,它会起作用:
<cfset castTicket = projectCode>
<!--- strip the first 5 characters, since it is always "CAST " --->
<cfset castTicket = removechars(castTicket, 1,5)>
<!--- now return the leftmost characters, up to the space --->
<cfset castTicket = left(castTicket, find(" ", castTicket) )>
<!--- format the number so it has 7 digits (2 leading zeros in this case) --->
<cfset castTicket = NumberFormat(castTicket, 0000000)>
<cfoutput>#castTicket#</cfoutput>
Returns:
0012345
您可以使用几个函数在一行代码中完成此操作。
str = 'CAST:98765 (RPOS1234-XY)';
projectCode = '00' & listLast( listFirst( str, ' ' ), ':' );
writeDump( projectCode );
从最里面的函数出去解释这段代码。
ListFirst() 根据您指定的分隔符获取列表中的第一个元素,在本例中分隔符是 ' ' - space - 是的,您可以使用 space作为分隔符。
ListLast() 根据您指定的分隔符获取列表中的最后一个元素,在本例中分隔符是“:”
第一部分简单地将“00”附加到上述函数调用的结果。
如果我必须使用 reReplaceNoCase 或 reFindNoCase,我会这样做。
function parseTokenUsingReFindNoCase(token) {
var local = {};
// use regex to locate position of number (see only set of parentheses in regex pattern)
local.positions = reFindNoCase("^.+:(\d+).+$", arguments.token, 1, true);
// obtain the token substring and ensure at least 7 digits with preceding 0's
local.result = numberFormat( mid(arguments.token, local.positions.pos[2], local.positions.len[2]), repeatString(0, 7));
return local.result;
}
function parseTokenUsingReReplaceNoCase(token) {
var local = {};
// use regex to strip away text before and after the token
local.result = reReplaceNoCase(arguments.token, "(^\D+|\s.+$)", "", "all");
// ensure at least 7 digits with preceding 0's
local.result = numberFormat(local.result, repeatString(0, 7));
return local.result;
}
<h1>ParseToken</h1>
<h2>Using ReFindNoCase</h2>
<cfdump var="#parseTokenUsingReFindNoCase("CAST:98765 (RPOS1234-XY)")#" /><br>
<cfdump var="#parseTokenUsingReFindNoCase("CAST:591498 (FUBAR56-XE)")#" /><br>
<cfdump var="#parseTokenUsingReFindNoCase("CAST:784 (RFP4542-LL)")#" /><br>
<h2>Using ReReplaceNoCase</h2>
<cfdump var="#parseTokenUsingReReplaceNoCase("CAST:98765 (RPOS1234-XY)")#" /><br>
<cfdump var="#parseTokenUsingReReplaceNoCase("CAST:591498 (FUBAR56-XE)")#" /><br>
<cfdump var="#parseTokenUsingReReplaceNoCase("CAST:784 (RFP4542-LL)")#" /><br>
ParseToken
使用 ReFindNoCase
- 0098765
- 0591498
- 0000784
使用 ReReplaceNoCase
- 0098765
- 0591498
- 0000784
我需要显示格式类似于此的数据记录的输出:XXXX:12345 (Xxxxxxxxx)
但是,我想要输出的唯一数据是“12345”和前面两个零,即输出应该类似于“0012345”。记录中的“12345”仅为示例,每条记录都分配有唯一编号。示例记录如下所示:CAST:98765 (RPOS1234-XY)
我可以使用 ReplaceNoCase() 仅从记录中提取该数据吗?如果是这样,我将如何编写代码来删除不需要的字符?
它不使用 replaceNoCase,但根据您的评论,它会起作用:
<cfset castTicket = projectCode>
<!--- strip the first 5 characters, since it is always "CAST " --->
<cfset castTicket = removechars(castTicket, 1,5)>
<!--- now return the leftmost characters, up to the space --->
<cfset castTicket = left(castTicket, find(" ", castTicket) )>
<!--- format the number so it has 7 digits (2 leading zeros in this case) --->
<cfset castTicket = NumberFormat(castTicket, 0000000)>
<cfoutput>#castTicket#</cfoutput>
Returns:
0012345
您可以使用几个函数在一行代码中完成此操作。
str = 'CAST:98765 (RPOS1234-XY)';
projectCode = '00' & listLast( listFirst( str, ' ' ), ':' );
writeDump( projectCode );
从最里面的函数出去解释这段代码。
ListFirst() 根据您指定的分隔符获取列表中的第一个元素,在本例中分隔符是 ' ' - space - 是的,您可以使用 space作为分隔符。
ListLast() 根据您指定的分隔符获取列表中的最后一个元素,在本例中分隔符是“:”
第一部分简单地将“00”附加到上述函数调用的结果。
如果我必须使用 reReplaceNoCase 或 reFindNoCase,我会这样做。
function parseTokenUsingReFindNoCase(token) {
var local = {};
// use regex to locate position of number (see only set of parentheses in regex pattern)
local.positions = reFindNoCase("^.+:(\d+).+$", arguments.token, 1, true);
// obtain the token substring and ensure at least 7 digits with preceding 0's
local.result = numberFormat( mid(arguments.token, local.positions.pos[2], local.positions.len[2]), repeatString(0, 7));
return local.result;
}
function parseTokenUsingReReplaceNoCase(token) {
var local = {};
// use regex to strip away text before and after the token
local.result = reReplaceNoCase(arguments.token, "(^\D+|\s.+$)", "", "all");
// ensure at least 7 digits with preceding 0's
local.result = numberFormat(local.result, repeatString(0, 7));
return local.result;
}
<h1>ParseToken</h1>
<h2>Using ReFindNoCase</h2>
<cfdump var="#parseTokenUsingReFindNoCase("CAST:98765 (RPOS1234-XY)")#" /><br>
<cfdump var="#parseTokenUsingReFindNoCase("CAST:591498 (FUBAR56-XE)")#" /><br>
<cfdump var="#parseTokenUsingReFindNoCase("CAST:784 (RFP4542-LL)")#" /><br>
<h2>Using ReReplaceNoCase</h2>
<cfdump var="#parseTokenUsingReReplaceNoCase("CAST:98765 (RPOS1234-XY)")#" /><br>
<cfdump var="#parseTokenUsingReReplaceNoCase("CAST:591498 (FUBAR56-XE)")#" /><br>
<cfdump var="#parseTokenUsingReReplaceNoCase("CAST:784 (RFP4542-LL)")#" /><br>
ParseToken
使用 ReFindNoCase
- 0098765
- 0591498
- 0000784
使用 ReReplaceNoCase
- 0098765
- 0591498
- 0000784