Email có hợp lệ không?

Rõ ràng từ tên của gói này, nó giúp xác thực địa chỉ email. Nó giúp chúng tôi đảm bảo địa chỉ email đã cung cấp có hợp lệ (theo một số tiêu chuẩn) hay không

Laravel có một công cụ Xác thực mạnh mẽ giúp bạn xác thực dữ liệu của mình theo các yêu cầu đến. Nó cũng cung cấp một số cách để thực hiện xác nhận

  • Bằng cách gọi phương thức validate trên đối tượng Request bên trong phương thức điều khiển
  • Bằng cách gọi phương thức $this->validate() bên trong phương thức điều khiển
  • Bằng cách sử dụng một lớp
    class UsersController
    {
        public function store(UsersRequest $request)
        {
            User::create($request->validated());
        }
    }
    
    0 riêng biệt
  • Phương pháp
    class UsersController
    {
        public function store(UsersRequest $request)
        {
            User::create($request->validated());
        }
    }
    
    1 được cung cấp bằng cách sử dụng đặc điểm ________0____2 trên bộ điều khiển

Chúng tôi sẽ tuân theo xác thực dựa trên

class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
0 vì nó đang trở thành một tiêu chuẩn trong cộng đồng Laravel

Lặn mã

Giả sử chúng ta đang xác thực trường địa chỉ email như bên dưới bên trong một

class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
0

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UsersRequest extends FormRequest
{
    public function rules()
    {
        return [
            'email_address' => ['email']
        ];
    }
}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Và sau đó sử dụng

class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
5 bên trong bộ điều khiển như bên dưới

class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Điều gì xảy ra khi chúng tôi gửi yêu cầu?

Khi chúng tôi gửi yêu cầu đến phương thức điều khiển ở trên, nhà cung cấp dịch vụ có tên

class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
6 được khởi động (cùng với các nhà cung cấp dịch vụ khác)

Chúng ta hãy xem phương pháp khởi động của nó

namespace Illuminate\Foundation\Providers;

use Illuminate\Contracts\Validation\ValidatesWhenResolved;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Routing\Redirector;
use Illuminate\Support\ServiceProvider;

class FormRequestServiceProvider extends ServiceProvider
{
    public function boot()
    {
        *$this->app->afterResolving(ValidatesWhenResolved::class,
                function ($resolved) {
            $resolved->validateResolved();
        });*

        $this->app->resolving(FormRequest::class, function ($request, $app) {
            $request = FormRequest::createFrom($app['request'], $request);

            $request->setContainer($app)
                ->setRedirector($app->make(Redirector::class));
        });
    }
}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Nếu chúng tôi diễn giải khối mã được đánh dấu, nó sẽ cho biết

Sau khi giải quyết lớp thực hiện giao diện

class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
7, hãy gọi phương thức
class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
8 trên thể hiện của nó

Lớp

class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
5 của chúng tôi mở rộng lớp
class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
0 thực hiện giao diện
class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
7. Việc triển khai cho phương pháp
class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
8 đã được thêm vào một Đặc điểm có thể tìm thấy tại
namespace Illuminate\Foundation\Providers;

use Illuminate\Contracts\Validation\ValidatesWhenResolved;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Routing\Redirector;
use Illuminate\Support\ServiceProvider;

class FormRequestServiceProvider extends ServiceProvider
{
    public function boot()
    {
        *$this->app->afterResolving(ValidatesWhenResolved::class,
                function ($resolved) {
            $resolved->validateResolved();
        });*

        $this->app->resolving(FormRequest::class, function ($request, $app) {
            $request = FormRequest::createFrom($app['request'], $request);

            $request->setContainer($app)
                ->setRedirector($app->make(Redirector::class));
        });
    }
}
3 được đưa ra bên dưới

public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Phương thức

namespace Illuminate\Foundation\Providers;

use Illuminate\Contracts\Validation\ValidatesWhenResolved;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Routing\Redirector;
use Illuminate\Support\ServiceProvider;

class FormRequestServiceProvider extends ServiceProvider
{
    public function boot()
    {
        *$this->app->afterResolving(ValidatesWhenResolved::class,
                function ($resolved) {
            $resolved->validateResolved();
        });*

        $this->app->resolving(FormRequest::class, function ($request, $app) {
            $request = FormRequest::createFrom($app['request'], $request);

            $request->setContainer($app)
                ->setRedirector($app->make(Redirector::class));
        });
    }
}
4 đã được ghi đè bên trong lớp
class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
0 như bên dưới

/**
 * Get the validator instance for the request.
 *
 * @return \Illuminate\Contracts\Validation\Validator
*/
protected function getValidatorInstance()
{
    if ($this->validator) {
        return $this->validator;
    }

    $factory = $this->container->make(ValidationFactory::class);

    if (method_exists($this, 'validator')) {
        $validator = $this->container->call(
            [$this, 'validator'], compact('factory')
        );
    } else {
        $validator = $this->createDefaultValidator($factory);
    }

    if (method_exists($this, 'withValidator')) {
        $this->withValidator($validator);
    }

    $this->setValidator($validator);

    return $this->validator;
}

/**
 * Create the default validator instance.
 *
 * @param  \Illuminate\Contracts\Validation\Factory  $factory
 * @return \Illuminate\Contracts\Validation\Validator
*/
protected function createDefaultValidator(ValidationFactory $factory)
{
    return $factory->make(
        $this->validationData(),
        $this->container->call([$this, 'rules']),
        $this->messages(),
        $this->attributes()
    )->stopOnFirstFailure($this->stopOnFirstFailure);
}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Để dễ hiểu đoạn code trên có thể dịch sang

Nếu nhà phát triển đã cung cấp triển khai trình xác thực của riêng họ bằng cách sử dụng phương pháp

namespace Illuminate\Foundation\Providers;

use Illuminate\Contracts\Validation\ValidatesWhenResolved;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Routing\Redirector;
use Illuminate\Support\ServiceProvider;

class FormRequestServiceProvider extends ServiceProvider
{
    public function boot()
    {
        *$this->app->afterResolving(ValidatesWhenResolved::class,
                function ($resolved) {
            $resolved->validateResolved();
        });*

        $this->app->resolving(FormRequest::class, function ($request, $app) {
            $request = FormRequest::createFrom($app['request'], $request);

            $request->setContainer($app)
                ->setRedirector($app->make(Redirector::class));
        });
    }
}
6 trên lớp
class UsersController
{
    public function store(UsersRequest $request)
    {
        User::create($request->validated());
    }
}
5, hãy sử dụng Trình xác thực đó. Mặt khác,
namespace Illuminate\Foundation\Providers;

use Illuminate\Contracts\Validation\ValidatesWhenResolved;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Routing\Redirector;
use Illuminate\Support\ServiceProvider;

class FormRequestServiceProvider extends ServiceProvider
{
    public function boot()
    {
        *$this->app->afterResolving(ValidatesWhenResolved::class,
                function ($resolved) {
            $resolved->validateResolved();
        });*

        $this->app->resolving(FormRequest::class, function ($request, $app) {
            $request = FormRequest::createFrom($app['request'], $request);

            $request->setContainer($app)
                ->setRedirector($app->make(Redirector::class));
        });
    }
}
8 và cung cấp
namespace Illuminate\Foundation\Providers;

use Illuminate\Contracts\Validation\ValidatesWhenResolved;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Routing\Redirector;
use Illuminate\Support\ServiceProvider;

class FormRequestServiceProvider extends ServiceProvider
{
    public function boot()
    {
        *$this->app->afterResolving(ValidatesWhenResolved::class,
                function ($resolved) {
            $resolved->validateResolved();
        });*

        $this->app->resolving(FormRequest::class, function ($request, $app) {
            $request = FormRequest::createFrom($app['request'], $request);

            $request->setContainer($app)
                ->setRedirector($app->make(Redirector::class));
        });
    }
}
9,
public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}
0 và
public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}
1, v.v. đến trường hợp
public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}
2

Bây giờ, một phiên bản Trình xác thực đã được tạo, tiếp theo trong phương thức

public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}
3 sẽ gọi phương thức
public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}
4 của phiên bản đã cho

namespace Illuminate\Validation;

class Validator implements ValidatorContract
{
    public function fails()
    {
        return ! $this->passes();
    }

        //ripped off implementation of passes() method
        public function passes()
    {
        foreach ($this->rules as $attribute => $rules) {
            **foreach ($rules as $rule) {
                $this->validateAttribute($attribute, $rule);
            }**
        }
    }

    //ripped off implementation of validateAttribute() method
    protected function validateAttribute($attribute, $rule)
    {
        $this->currentRule = $rule;

        [$rule, $parameters] = ValidationRuleParser::parse($rule);

        if ($rule == '') {
            return;
        }

        $value = $this->getValue($attribute);

        $validatable = $this->isValidatable($rule, $attribute, $value);

        **$method = "validate{$rule}";**

        if ($validatable &&! **$this->$method($attribute, $value, $parameters, $this)**)
        {
            $this->addFailure($attribute, $rule, $parameters);
        }
    }

}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Phương thức

public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}
4 gọi phương thức
public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}
6 lần lượt gọi phương thức
public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}
7. Đây là nơi các thuộc tính dữ liệu của chúng tôi được kiểm tra theo các quy tắc xác thực mà chúng tôi đã cung cấp

Chuỗi

public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}
8 đang tạo tên phương thức cho quy tắc đã cho. Vì chúng tôi đang khám phá quy tắc xác thực email, nó sẽ trở thành
public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}
9. Tiếp theo, phương thức này đang được gọi như một phần của điều kiện
/**
 * Get the validator instance for the request.
 *
 * @return \Illuminate\Contracts\Validation\Validator
*/
protected function getValidatorInstance()
{
    if ($this->validator) {
        return $this->validator;
    }

    $factory = $this->container->make(ValidationFactory::class);

    if (method_exists($this, 'validator')) {
        $validator = $this->container->call(
            [$this, 'validator'], compact('factory')
        );
    } else {
        $validator = $this->createDefaultValidator($factory);
    }

    if (method_exists($this, 'withValidator')) {
        $this->withValidator($validator);
    }

    $this->setValidator($validator);

    return $this->validator;
}

/**
 * Create the default validator instance.
 *
 * @param  \Illuminate\Contracts\Validation\Factory  $factory
 * @return \Illuminate\Contracts\Validation\Validator
*/
protected function createDefaultValidator(ValidationFactory $factory)
{
    return $factory->make(
        $this->validationData(),
        $this->container->call([$this, 'rules']),
        $this->messages(),
        $this->attributes()
    )->stopOnFirstFailure($this->stopOnFirstFailure);
}
0

Vì việc triển khai tất cả các phương pháp xác thực có sẵn có thể được tìm thấy trong đặc điểm

/**
 * Get the validator instance for the request.
 *
 * @return \Illuminate\Contracts\Validation\Validator
*/
protected function getValidatorInstance()
{
    if ($this->validator) {
        return $this->validator;
    }

    $factory = $this->container->make(ValidationFactory::class);

    if (method_exists($this, 'validator')) {
        $validator = $this->container->call(
            [$this, 'validator'], compact('factory')
        );
    } else {
        $validator = $this->createDefaultValidator($factory);
    }

    if (method_exists($this, 'withValidator')) {
        $this->withValidator($validator);
    }

    $this->setValidator($validator);

    return $this->validator;
}

/**
 * Create the default validator instance.
 *
 * @param  \Illuminate\Contracts\Validation\Factory  $factory
 * @return \Illuminate\Contracts\Validation\Validator
*/
protected function createDefaultValidator(ValidationFactory $factory)
{
    return $factory->make(
        $this->validationData(),
        $this->container->call([$this, 'rules']),
        $this->messages(),
        $this->attributes()
    )->stopOnFirstFailure($this->stopOnFirstFailure);
}
1. Do đó, phương pháp
public function validateResolved()
{
    $this->prepareForValidation();

    if (!$this->passesAuthorization()) {
        $this->failedAuthorization();
    }

    **$instance = $this->getValidatorInstance();**

    **if ($instance->fails()) {
        $this->failedValidation($instance);
    }**

    $this->passedValidation();
}
9 bên dưới

namespace Illuminate\Validation\Concerns;

use Egulias\EmailValidator\EmailValidator;
use Egulias\EmailValidator\Validation\DNSCheckValidation;
use Egulias\EmailValidator\Validation\MultipleValidationWithAnd;
use Egulias\EmailValidator\Validation\NoRFCWarningsValidation;
use Egulias\EmailValidator\Validation\RFCValidation;
use Egulias\EmailValidator\Validation\SpoofCheckValidation;

trait ValidatesAttributes
{

        /**
     * Validate that an attribute is a valid e-mail address.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @param  array  $parameters
     * @return bool
     */
    public function validateEmail($attribute, $value, $parameters)
    {
        $validations = collect($parameters)
            ->unique()
            ->map(function ($validation) {
                if ($validation === 'rfc') {
                    return new RFCValidation();
                } elseif ($validation === 'strict') {
                    return new NoRFCWarningsValidation();
                } elseif ($validation === 'dns') {
                    return new DNSCheckValidation();
                } elseif ($validation === 'spoof') {
                    return new SpoofCheckValidation();
                } elseif ($validation === 'filter') {
                    return new FilterEmailValidation();
                } elseif ($validation === 'filter_unicode') {
                    return FilterEmailValidation::unicode();
                } elseif (is_string($validation) && class_exists($validation)) {
                    return $this->container->make($validation);
                }
            })
            ->values()
            ->all() ?: [new RFCValidation()];

        return (new EmailValidator)->isValid($value, new MultipleValidationWithAnd($validations));
    }}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Đây là cách Laravel xác thực địa chỉ email bằng cách tận dụng các lớp xác thực email khác nhau từ gói

/**
 * Get the validator instance for the request.
 *
 * @return \Illuminate\Contracts\Validation\Validator
*/
protected function getValidatorInstance()
{
    if ($this->validator) {
        return $this->validator;
    }

    $factory = $this->container->make(ValidationFactory::class);

    if (method_exists($this, 'validator')) {
        $validator = $this->container->call(
            [$this, 'validator'], compact('factory')
        );
    } else {
        $validator = $this->createDefaultValidator($factory);
    }

    if (method_exists($this, 'withValidator')) {
        $this->withValidator($validator);
    }

    $this->setValidator($validator);

    return $this->validator;
}

/**
 * Create the default validator instance.
 *
 * @param  \Illuminate\Contracts\Validation\Factory  $factory
 * @return \Illuminate\Contracts\Validation\Validator
*/
protected function createDefaultValidator(ValidationFactory $factory)
{
    return $factory->make(
        $this->validationData(),
        $this->container->call([$this, 'rules']),
        $this->messages(),
        $this->attributes()
    )->stopOnFirstFailure($this->stopOnFirstFailure);
}
3

Sự thật thú vị về gói này trong bối cảnh Laravel

  • Gói này lần đầu tiên được sử dụng bởi Laravel trong v5. 8
  • Yêu cầu kéo để thêm chức năng này do Leo Sjöberg mở và được Taylor Otwell hợp nhất vào tháng 11 năm 2018
  • PR có thể được tìm thấy ở đây
  • Trước khi thêm gói này, Laravel đã sử dụng hàm filter_var của PHP để xác thực địa chỉ email

Tôi hy vọng bạn thích bài viết này. Tiếp theo, chúng ta sẽ xem cách Laravel sử dụng gói

/**
 * Get the validator instance for the request.
 *
 * @return \Illuminate\Contracts\Validation\Validator
*/
protected function getValidatorInstance()
{
    if ($this->validator) {
        return $this->validator;
    }

    $factory = $this->container->make(ValidationFactory::class);

    if (method_exists($this, 'validator')) {
        $validator = $this->container->call(
            [$this, 'validator'], compact('factory')
        );
    } else {
        $validator = $this->createDefaultValidator($factory);
    }

    if (method_exists($this, 'withValidator')) {
        $this->withValidator($validator);
    }

    $this->setValidator($validator);

    return $this->validator;
}

/**
 * Create the default validator instance.
 *
 * @param  \Illuminate\Contracts\Validation\Factory  $factory
 * @return \Illuminate\Contracts\Validation\Validator
*/
protected function createDefaultValidator(ValidationFactory $factory)
{
    return $factory->make(
        $this->validationData(),
        $this->container->call([$this, 'rules']),
        $this->messages(),
        $this->attributes()
    )->stopOnFirstFailure($this->stopOnFirstFailure);
}
4. Bạn có thể theo dõi tôi trên Twitter hoặc tham gia bản tin của tôi để cập nhật cho mình

Làm cách nào để kiểm tra xem email có hợp lệ trong PHP không?

PHP - Xác thực Email . use PHP's filter_var() function.

Làm cách nào để kiểm tra xem tên miền email có hợp lệ không?

Cách kiểm tra xem địa chỉ email có hợp lệ hay không .
Phương pháp 1. Gửi Email đến Địa chỉ. Có lẽ cách đơn giản nhất để kiểm tra xem một email có hợp lệ hay không là gửi tin nhắn cho nó. .
Phương pháp 2. Khôi phục mật khẩu. .
Phương pháp 3. Thực hiện tra cứu địa chỉ IP. .
Phương pháp 4. Tìm kiếm địa chỉ trong Google. .
Phương pháp 5. Trình kiểm tra email

Email hợp lệ có phải là Swift không?

Ba phương pháp xác thực email trong Swift . Tạo một lớp tùy chỉnh tuân theo RawRepftimeable chỉ khởi tạo nếu địa chỉ email hợp lệ được cung cấp. Using functions of Swift NSPredicate class to match an email address input with a regular expression. Creating a custom class conforming to RawRepresentable which initializes only if a valid email address is provided.

Làm cách nào để xác thực email bằng regex?

Để nhận id email hợp lệ, chúng tôi sử dụng biểu thức chính quy /^[a-zA-Z0-9. #$%&'*+/=?^_`{. }~-]+@[a-zA-Z0-9-]+(?. \. [a-zA-Z0-9-]+)*$/. .
Chữ hoa (A-Z) và chữ thường (a-z) chữ cái tiếng Anh
Chữ số (0-9)
Nhân vật. # $ % & ' * + - / = ?.
Tính cách