我在验证Laravel 5.4中的电子邮件长度时遇到问题。
在迁移中,我默认创建了email字段,并且在数据库中正确完成了varchar (191) utf8mb4_unicode_ci
的工作。
在前端,验证没有问题,但是在后端,最多只允许73个字符。
在Controller中保存和更新方法时,我尝试过:
$this->validate($request, [
// ...
'email' => 'nullable|email',
// ....
]);
$this->validate($request, [
// ...
'email' => 'nullable|email|max:191',
// ....
]);
查看表单输入:
{!! Form::label('email', 'Email:') !!}
{!! Form::email('email', null, ['class' => 'form-control' . ($errors->has('email') ? ' is-invalid' : ''), 'maxlength' => 191]) !!}
@if ($errors->has('email'))
<span class="invalid-feedback">{{ $errors->first('email') }}</span>
@endif
这将通过验证(73个字符):
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatest_com
但此(或更长的)未通过验证(74个字符):
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatest
(我还尝试了其他字符,而不仅仅是aaa,以防万一不是没有运气的长度)
我在做什么错了?
答案 0 :(得分:0)
电子邮件的RFC规范以及在其中的有效技术规范。
- 电子邮件地址由本地部分和域组成,并由一个@符号(RFC 2822 3.4.1)分隔。
- 本地部分可以由字母和数字字符以及以下字符组成:!,#,$,%,&,',*,+,-,/,=,?,^,_,`,{ ,| 、、}和〜,可能在内部,但不在另一个点分隔符(RFC2822 3.2.4)的开始,结尾或旁边,也可以带点分隔符(。)。
- 本地部分可以由带引号的字符串组成,即引号(“)中的任何内容,包括空格(RFC 2822 3.2.5)。
- 带引号的对(例如@)是本地部分的有效组成部分,尽管是RFC 822(RFC 2822 4.4)的过时形式。
- 本地部分的最大长度为64个字符(RFC 2821 4.5.3.1)。
- 域由由点分隔符(RFC1035 2.3.1)分隔的标签组成。
- 域标签以字母字符开头,后跟零个或多个字母字符,数字字符或连字符(-),以字母或数字字符结尾(RFC 1035 2.3.1)。
- 标签的最大长度为63个字符(RFC 1035 2.3.1)。
- 域的最大长度为255个字符(RFC 2821 4.5.3.1)。
- 该域必须完全合格并且可解析为A型或MX DNS地址记录(RFC 2821 3.6)。
因此,总而言之,如果您想使用更长的密码,则应添加自定义电子邮件规则,这样可以避免某些检查。