BlueDragon 7.1中的正则表达式允许$ sign

时间:2012-08-21 18:33:21

标签: regex coldfusion cfml cfform bluedragon

我正在使用BlueDragon的cfform验证:

<cfinput validateat="onServer" validate="regex" pattern="^[a-zA-Z0-9 ]+$"  name="COMPANYDBA" />

但这种模式并没有产生正确的结果。美元符号出现问题: 的 ^[a-zA-Z0-9 ]+$

预期结果:没有特殊字符

实际结果:除了允许$ sign

外没有特殊字符

为什么世界上会允许在字符串中加一个美元符号?

2 个答案:

答案 0 :(得分:0)

分别尝试使用\A\Z代替^$

答案 1 :(得分:0)

一个老问题,但它被列为无人接听,所以这是一个(过长的)答案,以阻止这种情况(一旦有人提出它,无论如何)。

cfform的来源不太可能在B​​D7和OpenBD之间发生显着变化 - 因为现在几乎 nobody 建议使用cfform - 所以这里是产生HTML的OBD代码:

  

http://websvn.openbd.org/websvn/filedetails.php?repname=OpenBD&path=%2Ftrunk%2Fsrc%2Fcom%2Fnaryx%2Ftagfusion%2Fcfm%2Fcfform%2FcfAbstractFormTag.java

此代码告诉我们的是,使用提供的属性,输出一个以后缀_CFFORMREGEX命名的隐藏表单字段,并显示要测试的模式。
(当然,这不是真正的服务器端验证,尽管有validateat="onserver"建议,因此是不使用cfform的另一个原因)。

提交后,将通过cfFormData.java文件拾取并使用该表单字段:

  

http://websvn.openbd.org/websvn/filedetails.php?repname=OpenBD&path=%2Ftrunk%2Fsrc%2Fcom%2Fnaryx%2Ftagfusion%2Fcfm%2Fengine%2FcfFormData.java

如果您遵循它最终通过com.nary.util.string.regexMatches运行模式,该模式使用Apache ORO检查匹配:

  

http://websvn.openbd.org/websvn/filedetails.php?repname=OpenBD&path=%2Ftrunk%2Fsrc%2Fcom%2Fnary%2Futil%2Fstring.java

使用SINGLELINE_MASK意味着^$将执行内容匹配的常规开始/结束(不是行的开头/结尾),.包含换行符。

尽管如此,我们可以明确指出,如果提供的模式为^[a-zA-Z0-9 ]+$,那么$将不被接受,因此原始问题必须比已经揭示的更多。

当然,而不是担心所有,最合适的解决方案是:停止使用cfform

有很多优秀的选项可以进行正确的表单验证,请参阅Charlie Arehart的列表:cf411.com/form