遵循经验法则永远不要相信从最终用户收到的数据,然后才能充分利用它,我尝试了一个核心验证器'比赛。在将其作为模式放置之前,我已经使用在线regex101和正则表达式调试器在6个步骤中匹配样本字符串来测试表达式。但是,当我把它放在我的规则中并尝试它时,我的输入无效。
这就是我的所作所为:
public function rules()
{
return [
[['name', 'code'], 'required'],
[['name'], 'string', 'max' => 40],
['name','match','pattern'=>'/^([\w ]+)\z/i'],
[['code'], 'string', 'max' => 9],
['code','match','pattern'=>'/^(?:[0-1])(?:[0-9])[0]+\z/'],
[['name','code'], 'unique','attributes'=>['name','code']],
];
这里是输入:
请帮助需要帮助
答案 0 :(得分:2)
我想这里真正发生的事情只是客户端验证失败。
这是因为PHP正则表达式引擎与JS不同。
如果您使用regex101服务来检查表达式,可以通过将左侧菜单上的风味从pcre (php)
切换到javascript
来测试它。如果pcre
没问题,那么它可以在服务器端运行,如果javascript
没问题,它也适用于客户端。
这里的解决方案是: