在ColdFusion中转换为整数;消毒变量

时间:2010-08-12 13:03:03

标签: validation coldfusion

我在ColdFusion生锈了,我已经习惯了PHP这么久了。我想做的是这样的事情:

<?php
  $id = (isset($_GET['id'])) ? (int)$_GET['id'] : 0;
?>

基本上,检查一个名为id的url参数,如果它存在,请确保它是一个整数,这样我就可以安全地在数据库查询中使用它。如果它结束为零,那也没关系。

我有:

<cfscript>
if (IsDefined("URL.id") AND IsNumeric(URL.id)) {
    id = int(URL.id);
} else {
    id = 0;
}
</cfscript>

这很有效,但非常混乱。有更好的方法吗?

6 个答案:

答案 0 :(得分:10)

最近版本的ColdFusion也有一个三元条件运算符:

<cfset id = (structKeyExists(URL, "id") and isNumeric(URL.id)) ? int(URL.id) : 0>

答案 1 :(得分:1)

我会使用cfparam。我也明确说明了范围,但这不是必要的。我不会使用IIF()函数,因为它使用了evaluate(),这可能会有问题,我也会出于同样的原因避免使用DE()。在这种情况下,它不会是一个问题,但我在一般原则上避免它们在任何不是绝对必要的情况下。我已经使用CF几年了,现在还没有必要。

<cfparam name="url.id" default="0" />

<cfif isNumeric(url.id)>
    <cfset local.id = int(url.id) />
<cfelse>
    <cfset local.id = 0 />
</cfif>

答案 2 :(得分:1)

对我来说,确保变量是整数的最简单方法是将变量包装在val()中。

它尝试解析字符串并提取找到的任何整数(在字符串的开头)。如果没有找到,则返回0.

  • 如果TestValue =“234A56?7'”,则Val(TestValue)返回234.
  • 如果TestValue =“234'5678'9?'”,Val(TestValue)返回234。
  • 如果TestValue =“BG234”,Val(TestValue)返回值0,(不是错误)。
  • 如果TestValue =“0”,Val(TestValue)返回值0,(不是错误)。

请参阅http://cfquickdocs.com/cf8/#Val

答案 3 :(得分:1)

抱怨提出一个旧线程,但想出了同样的问题并找到了一个简单的解决方案,可以帮助其他人解决这个问题

NumberFormat(URL.id)

您还可以在不同的场景中指定各种面具

ColdFusion参考

  

格式化数字值:

     

如果未指定掩码,则返回值为千位分隔符的整数。   如果参数值为“”(空字符串),则返回0.

http://help.adobe.com/livedocs/coldfusion/8/htmldocs/help.html?content=functions_m-r_08.html

答案 4 :(得分:0)

您也可以查看cfparam

<cftry>
  <cfparam name="url.id" default="0" type="integer">
<cfcatch>
  <!--- log? etc --->
  <cfset url.id = 0>
</cfcatch>
</cftry>

答案 5 :(得分:-4)

您可以使用IIF。这很酷。

<cfset id = IIf(IsDefined("URL.id") AND Int(URL.id), Int(URL.id), DE("0"))>