2016-11-07 91 views
1

在Laravel 5.1中,我使用Regex Match來驗證檢查是否將發佈值設置爲truefalse。張貼的價值是這樣的:Laravel 5.3驗證正確性或錯誤的正則表達式檢查失敗

acceptTerms true 

我再從Laravel驗證檢查值是這樣的:

$validator = Validator::make($postData, [ 
    'acceptTerms' => ["regex:(true|false)"], 
]); 

由於更新到Laravel 5.3,上面的驗證規則失敗,總是會引發錯誤: acceptTerms format is invalid.

爲什麼它失敗了,我該如何檢查Laravel 5.3中的值是否設置爲truefalse

EDIT 1:

我忘了補充,張貼的數據被髮送作爲JSON.stringify(data)和在Laravel我接收它作爲Input::json('data')。這會改變什麼嗎?

編輯2:

dd($postData)返回此:

array:31 [ 
    "id" => "8" 
    "appId" => "1" 
    "name" => "Asdsad" 
    "acceptTerms" => true 
    ] 
+0

三元運算符? – Birdy

+0

對不起,我不明白。 – Neel

+0

另一點我沒有在我的問題中添加的是,發佈的數據是作爲'JSON.stringify(data)'發送的,而在Laravel中,我將它作爲'Input :: json('data')'接收。這會改變什麼嗎? – Neel

回答

2

如果它是布爾,你可以使用boolean

我想它比regex更具可讀性。

The field under validation must be able to be cast as a boolean. Accepted input are true, false, 1, 0, "1", and "0".

+1

多數民衆贊成它!你今天救了我兩次。謝謝你堆!我一直認爲'布爾值'檢查僅適用於1和0,並且從未在5.3中嘗試過。將驗證更新爲'boolean'就行了。 – Neel

+1

很高興幫助。 ) –

1

您可以in()試試這個爲:

'acceptTerms' => 'in:true,false', 
+0

的響應爲此,我收到錯誤'Method [validateTrue,false] does not exist.' – Neel

+0

對不起,我的錯誤,現在回答更新。 –

+0

使用正則表達式模式時,可能需要在數組中指定規則,而不是使用管道分隔符,尤其是在正則表達式包含管道字符的情況下。 – Birdy