我有一个非常简单的任务,我不知道如何扩展我的代码,这解决了我的问题:
我有一个非常简单的表单,带有这样的输入字段:
<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表单验证允许数字类型包含逗号validateData()
函数的一部分。
numeric
您应该进行调整,使 preg 匹配改为
// @see https://regex101.com/r/bb9wtr/2
return (bool) preg_match('/\A[\-+]?\d*\.?\d+\z/', $str);
,这样就可以工作(根据 regex101 页面)。