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']