2015-04-15 112 views
1

我正在使用Propel的验证行为来验证架构内保存的数据。我有一个自动验证器,它使用预保存钩子来验证保存中的数据。Propel正则表达式验证问题

有问题的模式如下:

<behavior name = "validate"> 
     <parameter name = "username" 
        value = "{column: username, validator: Regex, 
        options: {pattern: &quot;/^[a-zA-Z0-9_?]{1,20}$/D&quot;}}"/> 
     <parameter name = "email" value = "{column: email, validator: Email}"/> 
</behavior> 

为username列的模式:

<column name="username" type="varchar" size="20" required="true" primaryString="true"> 

的电子邮件列中的验证工作正常,但是,对于用户名验证不是。预计会匹配使用字母,数字,下划线或问号的用户名,长度介于1到20个字符之间。在当前状态下,每个save()都会引发一个异常,包括有效的用户名。

但是,如果我将正则表达式更改为/^[a-zA-Z0-9_?]{1,20}/(删除$和D),它允许包含无效用户名的所有内容。

相关的Propel文档可以找到here

回答

0

尝试删除“D”修饰符。这仅改变行为,当你的用户名内的新行,但在这种情况下,你是不是包括允许的字符组\ R或\ N,所以无论如何都会失败,因为你期望

&quot;/^[a-zA-Z0-9_?]{1,20}$/&quot; 

您不能删除美元符号($),因为在这种情况下,只会考虑到表达式的前20个字符,而不会失败,当您将更多