推动正则表达式验证问题

时间:2015-04-15 03:50:33

标签: php regex validation 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>

用户名栏的架构:

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

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

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

可以找到相关的Propel文档here

1 个答案:

答案 0 :(得分:0)

尝试删除“D”修饰符。这只会在用户名中包含换行符时更改行为,但在这种情况下,您不在允许的字符组中包含\ r或\ n,因此无论如何都会失败

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

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