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

时间:2019-04-05 18:17:38

标签: laravel validation

我在验证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,以防万一不是没有运气的长度)
enter image description here

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

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

  
      
  1. 电子邮件地址由本地部分和域组成,并由一个@符号(RFC 2822 3.4.1)分隔。
  2.   
  3. 本地部分可以由字母和数字字符以及以下字符组成:!,#,$,%,&,',*,+,-,/,=,?,^,_,`,{ ,| 、、}和〜,可能在内部,但不在另一个点分隔符(RFC2822 3.2.4)的开始,结尾或旁边,也可以带点分隔符(。)。
  4.   
  5. 本地部分可以由带引号的字符串组成,即引号(“)中的任何内容,包括空格(RFC 2822 3.2.5)。
  6.   
  7. 带引号的对(例如@)是本地部分的有效组成部分,尽管是RFC 822(RFC 2822 4.4)的过时形式。
  8.   
  9. 本地部分的最大长度为64个字符(RFC 2821 4.5.3.1)。
  10.   
  11. 域由由点分隔符(RFC1035 2.3.1)分隔的标签组成。
  12.   
  13. 域标签以字母字符开头,后跟零个或多个字母字符,数字字符或连字符(-),以字母或数字字符结尾(RFC 1035 2.3.1)。
  14.   
  15. 标签的最大长度为63个字符(RFC 1035 2.3.1)。
  16.   
  17. 域的最大长度为255个字符(RFC 2821 4.5.3.1)。
  18.   
  19. 该域必须完全合格并且可解析为A型或MX DNS地址记录(RFC 2821 3.6)。
  20.   

因此,总而言之,如果您想使用更长的密码,则应添加自定义电子邮件规则,这样可以避免某些检查。