Regex 为什么这么简单;如果“stringLength”LT 10“;比较不起作用?

Regex 为什么这么简单;如果“stringLength”LT 10“;比较不起作用?,regex,coldfusion,Regex,Coldfusion,所以我使用ColdFusion来验证表单,由于表单的性质,验证可以非常简单。除了电话区外,我都能用。要使输入的电话号码有效,必须满足的唯一条件是,在删除所有非数字字符后,该号码必须至少有10个字符。下面是我使用的确切代码: <cfif len(REreplace(phoneNum, "[^0-9]", "", "all")) LT 10> [THROW AN ERROR] </cfif> [抛出错误] 问题是,无论phoneNum的长度如何,每次都会抛出一个

所以我使用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的长度,而事实显然不是这样。

您可以尝试使用isValid()代替


[抛出错误]

您可以尝试改用isValid()


[抛出错误]

我刚刚尝试了您的两个示例,它们对我来说都很好/正如预期的那样。我没有运行它,但因为Colin已经运行了,而且它也运行了。。。我没有发现你的代码有任何明显的错误,我不得不问。。。你确定那就是抛出错误的地方吗?对我来说也很好。您使用的是什么版本的CF?您是否尝试过将
重新替换(phoneNum,[^0-9],“,”all”)
本身(即,不使用
len()
)呢?它是否返回您期望的字符串?您是否已将服务器更新为最新的修补程序?众所周知,它会导致正则表达式问题。我刚刚尝试了你的两个示例,它们对我来说都很好/正如预期的那样。我没有运行它,但自从Colin运行了它,它就运行了。。。我没有发现你的代码有任何明显的错误,我不得不问。。。你确定那就是抛出错误的地方吗?对我来说也很好。您使用的是什么版本的CF?您是否尝试过将
重新替换(phoneNum,[^0-9],“,”all”)
本身(即,不使用
len()
)呢?它是否返回您期望的字符串?您是否已将服务器更新为最新的修补程序?众所周知,它会导致正则表达式问题。或
<cfif NOT isValid("telephone", phoneNum) >

[THROW ERROR]

</cfif>