如何用一个数字替换Coldfusion的前两个数字

3

我想要将第一个和第二个数字替换为0,如果它以0开头,则无需更改。 例如:445656 变成 056....

<cfif number (BEGIN WITH?) "44">
<cfset number = Right(number , Len(number )-2) /> 

但这只会移除前两位数字。感谢您的支持。

你尝试过使用 left() 函数吗?前两位数字 - SOS
1
如果它以除了“0”或“44”之外的其他内容开头会怎样? - David Faber
ColdFusion 的哪个版本? - James A Mohler
@James,版本ColdFusion 9 @David,它始终以44开头,我想用0替换它。 - Stef
如果数字是4405656,它应该变成005656还是05656?最终值是否应该是固定的位置数? - Shawn
1
@Stef 提醒一句,仅仅因为现在以0或44开头,并不意味着它将“永远”如此。我无法告诉你有多少次我不得不重构某些东西,因为业务需求在很长一段时间后发生了变化。如果在开始时考虑基本规则是微不足道的,那么你可能会使用它。 - Shawn
2个回答

5

看起来您将以“0开头”的数字保存为字符串。请尝试以下方法:

<!--- // a number that does not start with zero --->
<cfset theNumber = "445656" />
<cfset theNumber = left(theNumber, 1) is 0 ? theNumber : REReplaceNoCase(theNumber, "^[0-9]{2}", 0) />
<!--- // returns 05656 --->
<cfoutput>#theNumber#</cfoutput>

<hr />

<!--- // a number that starts with zero --->
<cfset theNumber = "05656" />
<cfset theNumber = left(theNumber, 1) is 0 ? theNumber : REReplaceNoCase(theNumber, "^[0-9]{2}", 0) />
<!--- // returns 05656 --->
<cfoutput>#theNumber#</cfoutput>

如果你的号码始终以0或44开头,你可以使用以下方法:
<cfset theNumber = left(theNumber, 1) is 0 
                    ? theNumber 
                    : REReplaceNoCase(theNumber, "^[4]{2}", 0) /> 

更新: 此外,请阅读评论,其中有一些好的观点。

嗨,Alex,谢谢。在这种情况下,只有当数字等于445656时才会发生变化。如果它以44777或44325开头怎么办?44将始终位于开头。谢谢支持。 - Stef
1
如果您的号码始终以0或44开头,您可以使用REReplaceNoCase(theNumber, "^[4]{2}", 0)。它将适用于任何以44开头的号码,包括44777或44325。 - Alex Baban
只是一个小问题,但是 left(theNumber),1 is 0 隐式地将字符串转换为数字。我会用 "0"。在替换值中也是一样的。如果它无意中将新值设置为数字而不是字符串并截断前面的 0,那么调试问题会让你发疯。编辑注意:REReplaceNoCase() 返回一个字符串,因此最终结果不太可能强制转换回数字。但仍然需要将替换值强制转换为数字。微观优化,但还是应该一开始就写好。 - Shawn
为了保持代码的清晰易懂,我可能不会将其命名为theNumber,而是使用the[与该字符串相关的任何内容] - Shawn
2
你不需要使用REReplaceNoCase()(该模式中没有涉及到字母),你可以直接使用REReplace("^44", theNumber, "0") - David Faber
@DavidFaber - 很有趣。我没意识到你可以只使用REReplaceNoCase()而不需要三元运算符的东西。 - SOS

1

这个 reReplace() 函数可以在任何字符串上运行,只会在字符串以 44 开头时才将其修改并替换为 0。

<cfscript>
   phoneNumber = "44556677";
   phoneNumber = reReplace(phoneNumber, "^44", "0");
   writeOutput(phoneNumber);
</cfscript>

1
将正则表达式 ^44 更改为 ^[1-9][0-9],以替换任何不以 0 开头的两个数字。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接