1

I need to display an output from a data record that is formatted similar to this: XXXX:12345 (Xxxxxxxxx)

However, the only data I want to output is the "12345" and with two preceding zeros, i.e. the output should look like "0012345". The "12345" in the record is example only, each record has a unique number assigned. An example record looks like this: CAST:98765 (RPOS1234-XY)

Can I use the ReplaceNoCase() to pull only that data out of the record? If so, how would I write the code to remove the unwanted characters?

4

3 回答 3

4

您可以使用几个函数在一行代码中完成此操作。

str = 'CAST:98765 (RPOS1234-XY)';
projectCode = '00' & listLast( listFirst( str, ' ' ), ':' );

writeDump( projectCode );

从最里面的函数出来解释这段代码。

ListFirst() 根据您指定的分隔符获取列表中的第一个元素,在这种情况下,分隔符是 ' ' - 一个空格 - 是的,您可以使用空格作为分隔符。

ListLast() 根据您指定的分隔符获取列表中的最后一个元素,在这种情况下,分隔符是 ':'

第一部分 simplt 将 '00' 附加到上述函数调用的结果中。

于 2015-01-15T15:12:05.520 回答
2

如果我必须使用 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

使用 ReplaceNoCase

  • 0098765
  • 0591498
  • 0000784
于 2015-01-15T17:32:35.720 回答
1

它不使用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>

回报:

0012345

于 2015-01-15T14:30:34.513 回答