推进正则表达式验证问题
Propel Regex validation issue
我正在使用 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() 保存到此 table 都会引发异常,包括有效的用户名。
但是,如果我将正则表达式更改为 /^[a-zA-Z0-9_?]{1,20}/
(删除 $ 和 D),它会允许所有内容,包括无效的用户名。
可以找到相关的 Propel 文档 here。
尝试删除 "D" 修饰符。这只会在用户名中有换行符时更改行为,但在这种情况下,您没有在允许的字符组中包含 \r 或 \n ,因此它无论如何都会像您期望的那样失败
"/^[a-zA-Z0-9_?]{1,20}$/"
您不能删除美元符号 ($),因为在这种情况下,只会考虑表达式的前 20 个字符,而不会在您添加更多字符时失败
我正在使用 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() 保存到此 table 都会引发异常,包括有效的用户名。
但是,如果我将正则表达式更改为 /^[a-zA-Z0-9_?]{1,20}/
(删除 $ 和 D),它会允许所有内容,包括无效的用户名。
可以找到相关的 Propel 文档 here。
尝试删除 "D" 修饰符。这只会在用户名中有换行符时更改行为,但在这种情况下,您没有在允许的字符组中包含 \r 或 \n ,因此它无论如何都会像您期望的那样失败
"/^[a-zA-Z0-9_?]{1,20}$/"
您不能删除美元符号 ($),因为在这种情况下,只会考虑表达式的前 20 个字符,而不会在您添加更多字符时失败