删除<;cfoutput>;使用ReplaceNoCase()ColdFusion

删除<;cfoutput>;使用ReplaceNoCase()ColdFusion,replace,coldfusion,character,cfoutput,Replace,Coldfusion,Character,Cfoutput,我需要显示数据记录的输出,其格式类似于:XXXX:12345(Xxxxxxxxx) 然而,我想要输出的唯一数据是“12345”,并且前面有两个零,即输出应该像“0012345”。记录中的“12345”仅为示例,每条记录都分配了一个唯一的编号。示例记录如下所示:CAST:98765(RPOS1234-XY) 我可以使用ReplaceNoCase()仅从记录中提取该数据吗?如果是这样,我将如何编写代码来删除不需要的字符?它不使用replaceNoCase,但根据您的评论,这将起作用: <cfs

我需要显示数据记录的输出,其格式类似于: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>

#船票#
返回:


0012345

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

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

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

writeDump( projectCode );
从最里面的函数开始解释这段代码

ListFirst()根据指定的分隔符获取列表中的第一个元素,在本例中,分隔符为“”-一个空格-是的,可以使用空格作为分隔符

ListLast()根据指定的分隔符获取列表中的最后一个元素,在本例中,分隔符为“:”


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

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

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

writeDump( projectCode );
从最里面的函数开始解释这段代码

ListFirst()根据指定的分隔符获取列表中的第一个元素,在本例中,分隔符为“”-一个空格-是的,可以使用空格作为分隔符

ListLast()根据指定的分隔符获取列表中的最后一个元素,在本例中,分隔符为“:”


第一部分simpt将“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;
}

ParseToken
使用ReFindNoCase



使用再置换酶



ParseToken

使用ReFindNoCase

  • 0098765
  • 0591498
  • 0000784
使用再置换酶

  • 0098765
  • 0591498
  • 0000784

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

ParseToken
使用ReFindNoCase



使用再置换酶



ParseToken

使用ReFindNoCase

  • 0098765
  • 0591498
  • 0000784
使用再置换酶

  • 0098765
  • 0591498
  • 0000784


  • XX
    s应该代表什么?它们可以是数字吗?还有,答案是否需要使用
    ReplaceNoCase()
    而不是,例如,第一组XXXX实际上是单词“CAST”,最后一组(XXXXXXXX)在参数中长度可变,并且包含字母数字字符。不必是ReplaceNoCase()。没有查看ListToArray函数,但“12345”只是一个示例,所有记录都有一个唯一的数字。前面有两个零,您的意思是用零填充提取的数字吗?还有,到目前为止你试过什么?XX应该代表什么?它们可以是数字吗?还有,答案是否需要使用
    ReplaceNoCase()
    而不是,例如,第一组XXXX实际上是单词“CAST”,最后一组(XXXXXXXX)在参数中长度可变,并且包含字母数字字符。不必是ReplaceNoCase()。没有查看ListToArray函数,但“12345”只是一个示例,所有记录都有一个唯一的数字。前面有两个零,您的意思是用零填充提取的数字吗?另外,到目前为止您尝试了什么?实际的数据标记是#projectCode#,因此我的示例中的第一行应该是:然后将第一行更改为
    @CajunWebDev请注意Chris没有使用
    “##”
    来设置变量。设置变量时,几乎不需要磅符号。我得到以下错误:左函数的2参数,现在是0,必须是正整数,这使我认为在数字之后和
    之前没有空格(
    …可能是吗?实际的数据标记是#projectCode#,所以我在示例中的第一行应该是:然后将第一行更改为
    @CajunWebDev请注意Chris没有使用
    “#”
    设置变量。设置变量时,几乎不需要磅符号。我得到以下错误:左函数的2参数,现在为0,必须是正整数,这使我认为在数字之后和
    之前没有空格(
    …可能是吗?当然,如果字符串的语法发生变化,那么上面的代码也可能需要更改。或者使用多个分隔符。然后,只需一个列表函数调用即可获得原始值,即
    getToken(text,2,“:”)
    。如果不需要尾随空格,请对其进行修剪。我永远记不起使用
    getToken()
    。很好的调用。实际上,您可以使用
    getToken(str,2,“:”)
    ,它会处理尾随空间。@scott stroz这很有效!非常感谢!我对代码进行了一些修改,以满足数据和输出的需要,但这解决了问题!castTicket=projectCode;castNumber='00'&listLast(listFirst(castTicket,'),':'))##castNumber#当然,如果字符串的语法发生了变化,那么可能需要更改上面的代码。或者使用多个分隔符。然后,只需一个列表函数调用即可获得原始值,即
    getToken(text,2,“:(”
    。如果不需要尾随空格,请进行修剪。我永远都记不住要使用