簡體   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