【问题标题】:How can I validate both for integers and in a range in a ColdFusion form?如何验证 ColdFusion 表单中的整数和范围?
【发布时间】:2010-09-25 17:11:14
【问题描述】:

在 CF8 表单中,我使用如下标签:

<cfinput 
    type = "Text" 
    name = "Num" 
    value = "0" 
    validate = "range,integer" 
    range = "0,1000" 
    validateAt="onBlur,onSubmit" 
    required = "yes" 
    message = "Invalid Value" 
>

当字段失去焦点 (onBlur) 时,输入仅针对 validate 参数中的第一个条件进行验证(当我交换订单时它会改变)。

这是自动生成的 html / JS 代码:

<input 
    name="Num" 
    id="Num"
    type="text" 
    value="0" 
    onblur="if( !_CF_hasValue(this, 'TEXT', false) 
    && 
    !_CF_checkrange(this.value,0.0,1000.0, true) 
    ||
    !_CF_checkinteger(this.value, true) )
    { _CF_onErrorAlert(new Array('Invalid Value')); }" 
/>

OnSubmit 由单独的自动生成的 JS 处理并正常工作。

我做错了吗? CF8 不支持同时验证这两个条件吗?

【问题讨论】:

  • 如果你找到了原因,把它贴在这里就好了。
  • 我已将此提交给 Adob​​e。当我得到答案时,我会发布它。
  • 我查看了 CF8 Updater 1 的发行说明,但没有提到任何内容。让我感到奇怪的是,这种明显的东西竟然通过了质量控制。

标签: validation forms coldfusion input


【解决方案1】:

查看这个创建的 JavaScript,逻辑有错误。

目前是:

if (!has_value && !in_range || !is_integer) show_error()

但我认为它确实应该是:

if (!has_value || !in_range || !is_integer) show_error()

由于 JavaScript 会短路逻辑表达式并且 &amp;&amp; 优先于 ||,因此如果其他两个返回 true,则原始表达式中的第三个检查永远不会执行。

从表面上看,我姑且说这是一个错误。您是否缺少任何 CF 补丁?也许这已经解决了?

【讨论】:

    【解决方案2】:

    从生成的 JS 来看,它看起来肯定是在尝试同时满足这两个验证。如果它不起作用,您可能需要在 Firebug 中调试 JS 以查看究竟发生了什么。

    【讨论】:

      【解决方案3】:

      如果范围/整数验证不起作用,您可以使用正则表达式进行验证

      ^1?\d{1,3}$
      

      表示“字符串开头,可选1,1-3位,字符串结尾”。

      未经测试,您的里程可能会有所不同。

      【讨论】:

      • 这适用于 0-999 范围内的整数,但不适用于 79-1213(或问题中的 0-1000)。尽管我可能会想出一个可行的正则表达式,但它可能不是通用的。如果我自己滚动,我会在 JS 中完成。
      • 您也可以尝试修复我的回答中指出的 JS 验证表达式,然后制作您自己的“onblur”事件处理程序。
      • @dennis Williamson:实际上,它确实适用于 0-1000,就像问题中一样。这不是接近 79-1213 的好方法,但这不是专门要求的。
      • @Ben Doom:糟糕,我看错了正则表达式。它实际上匹配 0-1999。 ^(1000|\d{1,3})$ 会起作用。
      猜你喜欢
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2012-09-01
      • 1970-01-01
      相关资源
      最近更新 更多