javascript - 使用带有 ajax 和 jquery 的 js 模糊的 Laravel 电子邮件验证

标签 javascript php jquery ajax laravel

我想在不按 Laravel 中的提交按钮的情况下验证我的表单。我这里有一些代码,但只有 email format is invalid 有效。有人可以告诉我应该怎么做吗?我只是 ajax 的新手

PS:输入有效电子邮件时收到的消息 {readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, ...}

Blade

  <input  type="email" class="form-control" id="inputEmail" name="inputEmail" placeholder="Email" required value="{{ old('inputEmail') }}">

Ajax

   $(document).ready(function () {
    const emailValidation = document.querySelector('#inputEmail');
    const mailformat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; 
    emailValidation.addEventListener('blur', e => { 
      if (emailValidation.value.match(mailformat)) {

        $.ajax({
          type: 'get',
          url: '/emailValidation', 
          _token: "{{ csrf_token() }}",
          data: {
            'emailValidation': emailValidation.value, 
          },
          success: function (data) {
            if (data.validOrNot === "not taken"){
              console.log("it works!");
            } else {
              console.log("email taken!");

            }
          },
          error: function (error) {
            console.log(error);
          }
        });
      } else {

        console.log("Email format is invalid!");

      }
    });
  });

Controller

 public function emailValidation(Request $request){
        // $user = new User;
        $user = User::where('email', '=', Input::get('inputEmail'))->first();
        $emailPassed = $request->emailValidation;

        if ($user===null)
          return response()->json(['validOrNot' => 1]);
        else
          return response()->json(['validOrNot' => 0]);


      }

路线

    Route::get('/emailValidation', 'TeachersController@emailValidation');

最佳答案

如果你看一下官方文档,Laravel 有它自己的 email validation rule以及 unique validation rule而且,在我看来,对输入进行服务器端验证总是更好。

前端验证存在风险的原因有很多。看看at this question例如。

另外,你的正则表达式是错误的。 我还没有测试过 编辑:我已经在 regexr.com 上试过了,它不起作用但是有很多主题以及 this question这可以为您提供更精确的正则表达式。

无论如何,由于您正在对后端进行 Ajax 调用以进行验证,因此您应该按如下方式更改代码:

$(document).ready(function() {
  const emailValidation = document.querySelector('#inputEmail');

  emailValidation.addEventListener('blur', e => {
    // Let the backend do all the validation magic on blur
    $.ajax({
      type: 'get',
      url: '/emailValidation',
      _token: "{{ csrf_token() }}",
      data: {
        'email': emailValidation.value,
      },
      success: function(data) {
        // No need to check the data since it's a valid e-mail
      },
      error: function(error) {
        console.log(error);
      }
    });
  });
});

在你的 Controller 函数中:

public function emailValidation(Request $request) {
  // Validation
  $this->validate($request, [
    'email' => 'required|email|unique:users'
  ]);

  // Validation passes. Just send an empty response with 200 status code
  return new Response;
}

关于javascript - 使用带有 ajax 和 jquery 的 js 模糊的 Laravel 电子邮件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58198253/

相关文章:

php - 如何根据 JavaScript 函数的结果使用 PHP 写入数据库? (面子书应用程式)

php - 最简单的问题: extract values from array

php - 什么是模型,什么不是模型 php

javascript - AngularJS 和 UI-Select multiple with data

javascript - 在每次登录时生成新的 Django CSRF token

javascript - Angular 6 - 尝试服务应用程序时未定义进程

php - PhpStorm 2016.2.1 中未定义的常量特征

jQuery - 如何编写一个自动调用 future 元素的插件

jquery - 使用 jQuery 验证插件自定义日期格式

javascript - 获取表中具有相同名称的每个输入的值