我使用蓝龙的cfform验证:
<cfinput validateat="onServer" validate="regex" pattern="^[a-zA-Z0-9 ]+$" name="COMPANYDBA" />但这种模式并没有产生正确的结果。美元的标志有点问题:^[a-zA-Z0-9 ]+$
预期结果:无特殊字符
实际结果:没有特殊字符,只允许$符号
为什么在世界上这会允许一个美元符号的字符串?
发布于 2013-09-22 23:11:30
这是一个老问题,但它被列为未回答的问题,因此这里有一个(过长的)答案来阻止这种情况(无论如何,只要有人提出这个问题)。
在BD7和OpenBD之间,cfform的源代码不太可能发生重大变化--因为现在几乎没有人建议使用cfform --下面是生成OpenBD的OBD代码:
http://websvn.openbd.org/websvn/filedetails.php?repname=OpenBD&path=%2Ftrunk%2Fsrc%2Fcom%2Fnaryx%2Ftagfusion%2Fcfm%2Fcfform%2FcfAbstractFormTag.java
这段代码告诉我们的是,在提供了属性之后,将输出一个带有后缀_CFFORMREGEX的隐藏表单字段,以测试该模式。
(尽管what__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检查其匹配:
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的list:Cf411.com/表格
发布于 2012-08-21 18:39:17
尝试分别使用\A和\Z而不是^和$。
https://stackoverflow.com/questions/12060951
复制相似问题