我正在使用Propel的验证行为来验证模式中的保存数据。我有一个自动验证程序,它使用预保存挂钩来验证保存数据。
有问题的架构如下:
<behavior name = "validate">
<parameter name = "username"
value = "{column: username, validator: Regex,
options: {pattern: "/^[a-zA-Z0-9_?]{1,20}$/D"}}"/>
<parameter name = "email" value = "{column: email, validator: Email}"/>
</behavior>
用户名栏的架构:
<column name="username" type="varchar" size="20" required="true" primaryString="true">
电子邮件列的验证程序正在按预期工作,但是,用户名的验证程序不是。它应该匹配使用长度在1到20个字符之间的字母,数字,下划线或问号的用户名。在它的当前状态中,每个save()都会抛出一个异常,包括有效的用户名。
但是,如果我将正则表达式更改为/^[a-zA-Z0-9_?]{1,20}/
(删除$和D),它会允许所有内容,包括无效的用户名。
可以找到相关的Propel文档here。
答案 0 :(得分:0)
尝试删除“D”修饰符。这只会在用户名中包含换行符时更改行为,但在这种情况下,您不在允许的字符组中包含\ r或\ n,因此无论如何都会失败
"/^[a-zA-Z0-9_?]{1,20}$/"
你不能删除美元符号($),因为在这种情况下,只会考虑表达式的前20个字符,而不会在你输入更多字符时失败