yii2验证匹配正则表达式模式得到无效输入

时间:2017-04-05 02:27:23

标签: regex validation yii2

遵循经验法则永远不要相信从最终用户收到的数据,然后才能充分利用它,我尝试了一个核心验证器'比赛。在将其作为模式放置之前,我已经使用在线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']],
        ];

这里是输入:

region-regex-invalidInput

请帮助需要帮助

1 个答案:

答案 0 :(得分:2)

我想这里真正发生的事情只是客户端验证失败。

这是因为PHP正则表达式引擎与JS不同。 如果您使用regex101服务来检查表达式,可以通过将左侧菜单上的风味从pcre (php)切换到javascript来测试它。如果pcre没问题,那么它可以在服务器端运行,如果javascript没问题,它也适用于客户端。

这里的解决方案是:

  • 修改模式以适用于JS,
  • 关闭客户端验证,
  • 准备规则仅适用于服务器端(如使用内联验证程序),
  • 使用AJAX验证。