首页 > 解决方案 > 验证选择下拉菜单。只有一个选项是正确的提交表格

问题描述

所以我有一个带有文本框的简单表单,带有 2 个选项和一个提交按钮的下拉列表。我有一个包含两个值的下拉列表 - Google 和 Bing。如果您选择 Bing,我希望它引发错误。我为只接受字母的文本框做了类似的事情。如果您在输入框中添加数字,则会显示正则表达式错误。我如何为我的下拉菜单获取这个?

我的刀片文件:

    <form action="{{route('redirectURL')}}" method="GET">

    <input {!!$errors->has('searchText') ? 'style="background-color: #faa"' : '' !!} type="text" 
    value=" 
   {{old('searchText')}}" name="searchText" pattern="[a-zA-Z0-9]{5,30}" title="Vain [a-zA-Z0-9]{5,30}         
    hyväksytään"> <input type="submit" name="submit"><br>

    @error('searchText')
    <div style="background-color: lightgrey; width:230px;">
    {{$message}}
    </div>
    @enderror
    <select name="searchEngine">
    <option name="Google" value="http://www.google.com/search?q=" @if(old('searchEngine') ==         
    "http://www.google.com/search?q=") {{'selected'}} @endif >Google</option>
    <option name="Bing" value="http://www.bing.com/search?q=" @if(old('searchEngine') ==                 
    "http://www.bing.com/search?q=") {{'selected'}} @endif>Bing</option>
    </select>
    @error('Google')
    <div style="background-color: lightgrey; width:230px">
    {{$message}}
    </div>
    @enderror

我的控制器:

public function searchURL(){
$validator = request()->validate([
    'searchText'=> ['required','regex:/^[a-zA-Z]{5,30}$/'],
    'Google' => 'required'
],
    ['searchText.regex' => 'I accept only letters!',
    'Google.required' => 'Dont use Bing... use Google!'
    ]
);

文本框正则表达式错误显示它很好,但我无法弄清楚如何为 Bing 选项制作相同类型的错误。

标签: phplaravelvalidation

解决方案


以 html 形式选择的工作方式不同

<select name="engine">
   <option value="bing">bing</option>
</select>

在上面的代码中,当您在请求中提交数据时将是

engine = bing

所以你必须把验证放在 'engine' key. 在您的代码中,您必须进行验证searchEngine

// 选项一:'in' 采用逗号分隔的可接受值列表 $rules = [ 'engine' => 'in:google', ];

添加此规则并检查它是否有效根据您的要求更改键值

https://laravel.com/docs/5.5/validation#rule-in


推荐阅读