Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 空字符串的Laravel正则表达式验证_Regex_Laravel - Fatal编程技术网

Regex 空字符串的Laravel正则表达式验证

Regex 空字符串的Laravel正则表达式验证,regex,laravel,Regex,Laravel,我有以下验证, 它应该将字符串与字母、数字、破折号匹配。空输入也应有效。 正常的字符串验证是可以的,但我不能使它匹配“空”输入 字母代码格式无效 测试: “C14”//有效 “3.14”/“格式无效”,如预期的那样 “-”//有效 “//”格式无效,不应为如果您不添加必需的内容,则必须传递其他验证程序空字符串 以下是phpunit测试: /** @test */ public function letterCode() { $trans = new \Illuminate\Transla

我有以下验证,
它应该将字符串与字母、数字、破折号匹配。空输入也应有效。
正常的字符串验证是可以的,但我不能使它匹配“空”输入

字母代码格式无效

测试
“C14”//有效
“3.14”/“格式无效”,如预期的那样
“-”//有效

“//”格式无效,不应为

如果您不添加必需的内容,则必须传递其他验证程序空字符串

以下是phpunit测试:

/** @test */
public function letterCode()
{
    $trans = new \Illuminate\Translation\Translator(
        new \Illuminate\Translation\ArrayLoader, 'en'
    );

    $regex = 'regex:/^[A-Za-z0-9\-]*$/';

    $v = new Validator($trans, ['x' => 'C14'], ['x' => $regex]);
    $this->assertTrue($v->passes());

    $v = new Validator($trans, ['x' => '3.14'], ['x' => $regex]);
    $this->assertFalse($v->passes());

    $v = new Validator($trans, ['x' => '-'], ['x' => $regex]);
    $this->assertTrue($v->passes());

    $v = new Validator($trans, ['x' => ''], ['x' => $regex]);
    $this->assertTrue($v->passes());
}
这是用Laravel 5.5测试的,我刚刚在中发现有一个
可空的
规则。
你可以在报纸上看到


如果没有
nullable
规则,如果还有正则表达式规则,则空字符串将被视为无效。

我在使用GraphQL类型的Laravel 7.x中遇到了同样的问题。在一个叫做phone或nothig(空字符串)的字段中,我需要类似的东西。所以我做了这样的事情:

'phone' => [
        'name' => 'phone',
        'type' => Type::string(),
        'rules' => ['regex:/^[A-Za-z0-9\-]*$/','nullable']
这里,phone是要输入文本的字段的名称,而规则是我们定义为regex或NULL的


希望这对别人有帮助

展示你的测试cases@Marcin我猜测试用例是空字符串。它在验证器中吗?你到底想干什么?您想允许和空字符串还是确保它不是空的?我是指代码。对于medoes
'letter_code'=>'regex://^[A-Za-z0-9\-]*$/|min:0'
工作,Regexp看起来很好?与目前投票较多的答案相比,这实际上是正确的答案。
'phone' => [
        'name' => 'phone',
        'type' => Type::string(),
        'rules' => ['regex:/^[A-Za-z0-9\-]*$/','nullable']