我正在使用BlueDragon的cfform验证:
<cfinput validateat="onServer" validate="regex" pattern="^[a-zA-Z0-9 ]+$" name="COMPANYDBA" />
但这种模式并没有产生正确的结果。美元符号出现问题:
的 ^[a-zA-Z0-9 ]+$
预期结果:没有特殊字符
实际结果:除了允许$ sign
外没有特殊字符为什么世界上会允许在字符串中加一个美元符号?
答案 0 :(得分:0)
分别尝试使用\A
和\Z
代替^
和$
。
答案 1 :(得分:0)
一个老问题,但它被列为无人接听,所以这是一个(过长的)答案,以阻止这种情况(一旦有人提出它,无论如何)。
cfform的来源不太可能在BD7和OpenBD之间发生显着变化 - 因为现在几乎 nobody 建议使用cfform - 所以这里是产生HTML的OBD代码:
此代码告诉我们的是,使用提供的属性,输出一个以后缀_CFFORMREGEX
命名的隐藏表单字段,并显示要测试的模式。
(当然,这不是真正的服务器端验证,尽管有validateat="onserver"
建议,因此是不使用cfform的另一个原因)。
提交后,将通过cfFormData.java文件拾取并使用该表单字段:
如果您遵循它最终通过com.nary.util.string.regexMatches
运行模式,该模式使用Apache ORO检查匹配:
使用SINGLELINE_MASK意味着^
和$
将执行内容匹配的常规开始/结束(不是行的开头/结尾),.
包含换行符。
尽管如此,我们可以明确指出,如果提供的模式为^[a-zA-Z0-9 ]+$
,那么$
将不被接受,因此原始问题必须比已经揭示的更多。
当然,而不是担心所有,最合适的解决方案是:停止使用cfform 。
有很多优秀的选项可以进行正确的表单验证,请参阅Charlie Arehart的列表:cf411.com/form