Php 推进正则表达式验证问题
我正在使用spreep的validate行为来验证模式中的save数据。我有一个自动验证器,它使用预保存挂钩来验证保存时的数据 所讨论的模式如下:Php 推进正则表达式验证问题,php,regex,validation,propel,Php,Regex,Validation,Propel,我正在使用spreep的validate行为来验证模式中的save数据。我有一个自动验证器,它使用预保存挂钩来验证保存时的数据 所讨论的模式如下: <behavior name = "validate"> <parameter name = "username" value = "{column: username, validator: Regex, options: {pattern
<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}/
(删除$and D),它将允许所有操作,包括无效用户名
可以找到相关的推进文档。尝试删除“D”修饰符。这只会在用户名中有新行时更改行为,但在这种情况下,您没有将\r或\n包含在“允许的字符”组中,因此它仍将按预期失败
"/^[a-zA-Z0-9_?]{1,20}$/"
您不能删除美元符号($),因为在这种情况下,表达式的前20个字符中只会考虑美元符号($),如果再添加一些,则不会失败