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

时间:2017-10-15 13:39:31

标签: regex laravel

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

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

letter_code格式无效

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

3 个答案:

答案 0 :(得分:6)

我刚刚在laracasts forum中找到了nullable规则 您可以在official docs

中阅读相关内容

如果没有nullable规则,如果还存在正则规则,则空字符串被视为无效。

答案 1 :(得分:2)

如果你没有添加必需的附加验证器空字符串必须通过

这是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进行测试

答案 2 :(得分:0)

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

'phone' => [
        'name' => 'phone',
        'type' => Type::string(),
        'rules' => ['regex:/^[A-Za-z0-9\-]*$/','nullable']

在这里,电话是要在其中输入文本的字段的名称,而规则是我们定义为regex或NULL的内容。

希望这对某人有帮助!