Laravel密码与确认密码输入一致仍提示不匹配该如何解决?
问题根因
校验规则不生效的核心原因是前端Blade模板的确认密码字段属性拼写错误,和后端校验规则的字段名不匹配。
具体错误点
- 确认密码输入框的
name属性拼写错误:你写的是passsword_confirmation(多了1个s),和控制器校验规则里指定的password_confirmation不一致,后端无法接收到正确的确认密码参数,导致匹配校验一直失败。 - 额外小问题:确认密码输入框的
id属性误写为password,和密码输入框id重复,同时和label的for属性值不匹配,会导致点击label无法正常聚焦到确认密码输入框。
修复方案
- 修正Blade模板中确认密码字段的属性,修正后代码如下:
<div class="mb-4"> <label for="password_confirmation" class="sr-only">确认密码</label> <input type="password" name="password_confirmation" id="password_confirmation" placeholder="请重复输入密码" class="bg-gray-100 border-2 w-full p-4 rounded-lg" value=""> </div>
- (可选优化)控制器中的密码校验可以直接使用Laravel内置的
confirmed规则,写法更简洁,无需手动指定匹配字段,只要前端确认密码字段命名为{字段名}_confirmation即可自动校验:
// 原规则 'password' => 'required|same:password_confirmation', // 优化后 'password' => 'required|confirmed',
另外你当前的name字段校验规则里加了distinct规则,这个规则仅用于校验数组参数内部的值是否重复,对单值字段无效,没有需求可以删除该规则。
内容的提问来源于stack exchange,提问作者prasun regmi
相关产品推荐
相关产品推荐

