Laravel:验证表单中的名称输入

Posted

技术标签:

【中文标题】Laravel:验证表单中的名称输入【英文标题】:Laravel: Validate a name input in a form 【发布时间】:2017-10-27 23:27:02 【问题描述】:

我正在使用 laravel 并有一个表单。如何验证表单中输入字段的名称。这样就不能在该字段中输入随机数。它只是一个简单的输入字段:

<div class="col-md-6 col-sm-6">
   <label>First Name: </label>
</div>

<div class="col-md-6 col-sm-6">
   <input type="text" class ="span3" name="first_name" id="first_name" 
      required/><br><br>
</div>

我已经通过我看到的一个示例验证了一封电子邮件,并且在您键入后离开该输入框而不是等待单击提交按钮时,它就会被验证。

我怎样才能做到这一点?意思是,一旦用户在输入某些内容(数字)后离开输入字段,它就会验证并 说了些什么(比如“请输入一个正确的名字”)。我不确定是否 它是否需要使用正则表达式,以及如何获得我想要的结果。

我的电子邮件代码如下:

<div class="row">
   <div class="form-group $errors->has('email') ? ' has-error' : '' ">
        <div class="col-md-6 col-sm-6">
            <label>Email: </label>
        </div>
        <div class="col-md-6 col-sm-6">
        <input type="email" class ="span3" id="email" name="email" value=" 
              old('email') " required/><br><br>
         @if ($errors->has('email'))
           <span class="help-block">
             <strong> $errors->first('email') </strong>
           </span>
        @endif
   </div>
</div> 

我可以从一个示例中做到这一点,这会在用户输入后立即验证电子邮件。

【问题讨论】:

这不是完整的代码。对于实时表单验证,需要某种 javascript。请更新问题 @WesleyPeeters 没有实时验证怎么办? 我已经为你发布了一个相当长的答案哈哈!干杯 【参考方案1】:

在 jQuery 中,只要输入字段 #first_name 失焦,您就可以使用 focusout 方法。 https://api.jquery.com/focusout/

如果您想检查提供的给定值是否有效,您可以使用 [正则表达式],就像您在 email 输入字段中所做的一样:

这是一个给定的例子:

$('#first_name').focusout(function() 
    var sValue = $(this).val();
    var sEmailPattern = /[a-z][A-Z]$/i;
    var bCheckValue = sEmailPattern.test(sValue);
    console.log(bCheckValue);

    if (bCheckValue !== true) 
        alert('please enter a proper name');
        return false;
    

    // Rest of code ....

);

希望这对您的情况有所帮助。

【讨论】:

我尝试在输入后将其放在脚本标签中,但没有成功..我放错了吗? 嗯...你能console.log(sValue)吗?【参考方案2】:

要在 Laravel 中验证请求,您可以做两种不同的事情:


选项 1. 验证器

假设您的表单被发布到控制器中的方法test

public function test(Request $request)

    //

你可以在这个方法中做的是像这样使用验证器:

public function test(Request $request)

    $this->validate($request, [
        'email' => 'required|email',
    ]);

可以在Here 找到完整的验证规则列表。当验证规则失败时,使用它会抛出一堆错误。有关如何在视图中显示这些错误的说明,请参见 Here。


选项 2. 表单请求验证

另一种选择是使用请求类。这些请求类可以使用 artisan 命令生成。该命令的签名如下:

php artisan make:request NAME OF YOUR REQUEST

为了回答这个问题,我将使用一个名为 TestRequest 的请求类。生成后,类将如下所示:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class TestRequest extends FormRequest

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    
        return false;
    

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    
        return [
            //
        ];
    

让我们快速分解一下。

authorize 函数: 这个函数就像它的名字一样。它确定用户是否有权提出此请求。一个小例子是,在一个有留言簿的网站上,每个人都可以发表评论,所以你可以return true

public function authorize()

    return true;

但是,如果您希望某个用户仅在他具有某些权限的情况下才被允许,您也可以通过此功能进行检查。但是,authorize 函数必须返回一个布尔值 (true/false)。要了解这是如何完成的,请阅读 Laravel 的大门here。

rules 函数: 在此功能中,可以设置字段的验证规则。这些规则与之前提到的the validator 相同。一个小例子是这样的:

 public function rules()
    
        return [
            'email' => 'required|email'
        ];
    

其中数组元素的key是表单的name属性,value是验证规则列表,除以|

我建议你大致阅读 Laravel 的验证,这可以通过 here 完成。

我希望这对您有所帮助。干杯!

【讨论】:

我明白了,但是如何写正则表达式。会是这样:'first_name' => 'required|/[a-z][A-Z]/|first_name' 吗?在您提供的 laravel 文档链接中无法正确找到它

以上是关于Laravel:验证表单中的名称输入的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 表单验证错误消息中给出自定义字段名称

使用 laravel 框架提交数据后清除表单输入

通过 AJAX 验证 Laravel 表单中的文件输入

在 laravel 5 中的表单请求验证后传递旧输入

如何对 laravel 表单请求提出条件

如何使用验证“唯一”访问 Laravel 中的自定义文本框名称?