繁体   English   中英

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

[英]Laravel regex validation for empty string

我有以下验证,
它应该匹配带有字母、数字、破折号的字符串。 空输入也应该有效。
正常的字符串验证没问题,但我不能让它匹配“空”输入。

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

letter_code 格式无效

测试
"C14" // 有效
"3.14" // "格式无效",正如预期的那样
"-" // 有效
"" // "格式无效",不是预期的

我刚刚在laracasts 论坛中发现,有一个nullablenullable规则。
你可以在官方文档中阅读它。

如果没有nullable规则,如果也有正则表达式规则,空字符串也被认为是无效的。

如果您不添加 required 作为附加验证器空字符串必须通过

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

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

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

在这里,phone 是您要输入文本的字段的名称,而 rules 是我们定义为正则表达式或 NULL 的内容。

希望这可以帮助某人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM