在 CodeIgniter 4 中允许使用逗号(除了点之外)进行表单验证

问题描述 投票:0回答:1

我有一个非常简单的任务,我不知道如何扩展我的代码,这解决了我的问题:

我有一个非常简单的表单,带有这样的输入字段:

<input type="text" name="weight">

在我的控制器中,调用相应的函数后,我最终进入验证部分。看看这里:

public function store()
{
    helper(['form']);
    $data = [];
    
    $rules = [
        'currentWeight' => [
            'label'  => 'weight',
            'rules'  => 'required|numeric',
            'errors' => [
                'required'   => 'The {field} is required.',
                'numeric'    => '{field} needs to be numeric (e.g. 88.2)'
            ]
        ],
    ];
    
    
    if($this->validate($rules)) {           
        $data = [
            'weight'  => $this->request->getVar('currentWeight'),
        ];
        
        $data["success"] = "New Entry point set";
        echo view('useradmin/insert_weight', $data);
        
    } else {
        $data['validation'] = $this->validator;
        echo view('useradmin/insert_weight', $data);
    }
}

所以,如您所见,这非常简单。然而,CI4 的

decimal
规则仅允许十进制数中的
.
。所以基本上,88.2 是允许的,而 88,2 是不允许的。我遵循了有关如何使用验证器的教程,但在其他地方,他们的做法似乎有所不同。

我最初的想法是,我可以简单地在逗号上加上点,然后再检查它。但是,我似乎无法使用自定义规则甚至调整变量来连接

str_replace
函数。
我知道我可能会添加一条新规则,来处理这些数字中的

$this->validate

,但我认为会有一种更智能、更有效的方法。

我还尝试使用某种回调,但我无法正确解决。

根据我收集的信息,似乎还有一个选项可以使用验证帮助程序或类似的功能,例如

,

,但我有点卡在这里。

我也无法找到某种可能解决小数点问题的语言环境。你能指出我正确的方向吗?我正在使用 

CI 4.5.5

(我在这里发现了类似的问题:

Codeigniter表单验证允许数字类型包含逗号

- 但这已经严重过时了)

codeigniter codeigniter-4
1个回答
0
投票
validateData()

函数的一部分。

numeric

您应该进行调整,使 preg 匹配改为 
// @see https://regex101.com/r/bb9wtr/2 return (bool) preg_match('/\A[\-+]?\d*\.?\d+\z/', $str);

,这样就可以工作(根据 regex101 页面)。

    

© www.soinside.com 2019 - 2024. All rights reserved.