为什么这个简单的“If#stringLength#LT 10”比较不起作用?

时间:2011-06-06 17:25:36

标签: regex coldfusion

所以我使用ColdFusion来验证表单,并且由于此表单的性质,验证可以非常简单。除了电话领域,我已经全部工作了。输入电话号码必须满足的唯一标准是,在删除所有非数字字符后,它必须至少10个字符。以下是我正在使用的确切代码:

<cfif len(REreplace(phoneNum, "[^0-9]", "", "all")) LT 10>
    [THROW AN ERROR]
</cfif>

问题是每次都会抛出一个错误,无论phoneNum的长度如何,除非我要包含一个非数字字符来替换REreplace()。我想看看发生了什么,尝试一些不同的东西,所以我试验了这个:

<cfset phoneLength = len(REreplace(phoneNum, "[^0-9]", "", "all"))>
<cfdump var="#phoneLength#">

<cfif phoneLength LT 10>
    [THROW AN ERROR]
</cfif>

在这种情况下,我得到一个10或更多的转储值,但除非我在phoneNum中放入一个非数字字符,否则仍然会抛出错误。我可以使用完全相同数量的数字字符(即转储值保持不变)但添加括号或更改是否会引发错误。有谁知道这里发生了什么?我不敢相信我在问StackOverflow有关If / Then的问题,但我无法理解ColdFusion如何将phoneLength评估为低于10,当它显然并且明显没有。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用isValid()。

<cfif NOT isValid("telephone", phoneNum) >

[THROW ERROR]

</cfif>