Laravel 如何在电子邮件字段的验证中允许更多字符?

Laravel 如何在电子邮件字段的验证中允许更多字符?,laravel,validation,Laravel,Validation,我在验证Laravel 5.4中的电子邮件长度时遇到问题。 在迁移过程中,默认情况下我创建了email字段,它在DB中正确地完成,如varchar(191)utf8mb4\u unicode\u ci。 在前端,验证没有问题,但在后端,它最多只允许73个字符 在Controller on save and update方法中,我尝试了: $this->validate($request, [ // ... 'email' => 'nullable|email',

我在验证Laravel 5.4中的电子邮件长度时遇到问题。 在迁移过程中,默认情况下我创建了email字段,它在DB中正确地完成,如
varchar(191)utf8mb4\u unicode\u ci
。 在前端,验证没有问题,但在后端,它最多只允许73个字符

在Controller on save and update方法中,我尝试了:

$this->validate($request, [
    // ...
    'email' => 'nullable|email',
    // ....
]);
查看表单输入:

{!! 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

{!!表单::标签('email','email:')
{!!Form::email('email',null,['class'=>'Form control'。($errors->has('email')?'无效':'','maxlength'=>191])
@如果($errors->has('email'))
{{$errors->first('email')}
@恩迪夫
通过验证(73个字符):
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@test.com

但是这个或更长的字符不能通过验证(74个字符):
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@test.com
(我还尝试了其他角色,而不仅仅是aaa,以防万一这不是没有运气的长度)


我做错了什么?

电子邮件的RFC规范以及其中技术上有效的规范

  • 电子邮件地址由本地部分和域组成,由at符号(@)字符分隔(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)

  • 因此,总而言之,如果您想使用更长的电子邮件,您应该添加自定义电子邮件规则,这将避免一些此类检查。

    Ahh!是的,这是本地部分的长度。请注意,出于某种原因,Laravel最多验证74个字符,而不是标准所述的64个字符。我还测试了域部分,每个标签最多允许63个和标准一样。我只有191个域名部分不接触数据库。谢谢@nakov!
    {!! 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