首页 > 解决方案 > 选择单选按钮时,Laravel 验证将正则表达式匹配到单个输入

问题描述

基本上有 3 个单选按钮 - ssn、cin、no。其中“no”是没有 ssn 或 ein 号码。单个输入文本字段允许他们根据他们的单选按钮选择分别在字段中输入他们的号码。

所以我试图根据他们的选择返回一个正则表达式。

Identifier 是单选按钮,identifier_num 是文本字段。

 $validator = Validator::make($request->all(), [
  'identifier' => ['required',Rule::in(['ssn', 'ein', 'no'])],
   //'identifier_num' => 'required_if:identifier,sin,ein',
  'identifier_num'=> Rule::RequiredIf(function(){
      if(request()->input('identifier') == 'ssn'){
          return preg_match("/^\d{3}-\d{2}-\d{4}$/", request()->input('identifier_num'));
      }
      elseif(request()->input('identifier') == 'ein'){
          return preg_match("/^[1-9]\d?-\d{7}$/", request()->input('identifier_num'));
      }

它正确地落入功能。我可以登录输入。但是有些我在文本字段中输入的内容。无论输入如何,都通过验证。对此有什么建议吗?

添加了更多上下文。

单选按钮

<input id="ssn" type="radio" name="identifier" value="ssn"/>
<input id="ein" type="radio" name="identifier" value="ein"/>
<input id="no" type="radio" name="identifier" value="no"/>

输入字段..

<input id="identifier_num" type="text" name="identifier_num" value=""/>

编辑:这似乎按预期工作,但不是很优雅。

 'identifier' => ['required',Rule::in(['ssn', 'ein', 'no'])],
        'identifier_num'=> Rule::RequiredIf(function()
        {
            if(request()->input('identifier') == 'ssn')
            {
                if(!preg_match("/^\d{3}-\d{2}-\d{4}$/", request()->input('identifier_num')))
                {
                    $error = \Illuminate\Validation\ValidationException::withMessages([
                        'identifier_num' => ['This is not a valid Social Security Number'],
                     ]);
                     throw $error;
                }
            }
            elseif(request()->input('identifier') == 'ein')
            {
                if(!preg_match("/^[1-9]\d?-\d{7}$/", request()->input('identifier_num')))
                {
                    $error = \Illuminate\Validation\ValidationException::withMessages([
                        'identifier_num' => ['This is not a valid Ein Number'],
                    ]);
                    throw $error;
                }
            }


标签: regexlaravel-8laravel-validation

解决方案


推荐阅读