Laravel+Angular项目中手机号+号无法存入MySQL数据库问题
问题解决:手机号带+号无法存入数据库
问题根源
- 前端输入类型错误:使用
type="number"的输入框会自动过滤非数字字符(包括+号),导致用户输入的+号根本无法提交到后端 - 前端验证缺失:没有强制要求手机号必须包含+号的验证规则
- 后端验证不严谨:手机号字段未明确指定
string类型约束,可能引发类型转换问题
前端修改方案
- 将输入框类型从
number改为text,允许输入+号:
<div class="form-group"> <label for="mobilenumber"><i class="zmdi zmdi-phone p-3"></i></label> <input type="text" formControlName="phone_number" class="form-control" name="phone" id="mobilenumber" placeholder="Phone number (e.g. +123456789)" required="" control-id="ControlID-4"> </div>
- 添加带+号的手机号格式验证规则:
phone_number: new FormControl(null, [ Validators.required, Validators.pattern(/^\+\d+$/) // 确保以+开头,后续为数字 ]),
后端修改方案
完善Laravel的验证规则,明确string类型并添加格式校验:
public function CustomerRegister() { $inputs = $this->request->all(); $v = Validator::make($inputs, [ 'email' => 'required|string|max:50', 'password' => 'required|confirmed', 'password_confirmation' => 'required', 'first_name' => 'nullable|string|max:100', 'last_name' => 'nullable|string|max:100', 'phone_number' => 'nullable|string|max:15|regex:/^\+\d+$/', // 新增string约束和正则验证 'postcode' => 'nullable|string|max:15', 'abn' => 'nullable|string|max:15', 'state' => 'nullable|string|max:15', ]); // 后续验证及存储逻辑... }
数据库说明
你的数据库字段类型varchar(50)和排序规则utf8_general_ci完全符合要求,只要前端能正确提交带+号的字符串,后端验证通过后即可正常存入数据库。
内容的提问来源于stack exchange,提问作者Ali akbar
相关产品推荐
相关产品推荐

