2013-10-24 91 views
0

Laravel 4驗證。即使用戶名輸入字段包含無效字符「đšđšžšđčč」,以下通過驗證。這是爲什麼?不應該alpha_dash只允許'/ ^([a-z0-9 _-])+ $/i'?Laravel 4 alpha_dash驗證奇數問題

public function postSignup() 
{ 
    $data = Input::all(); 

    $validator = Validator::make(
     $data, 
     array('username' => 'required|alpha_dash') 
    ); 

    if ($validator->fails()) 
    { 
     echo 'fail'; 
    } 
    else 
    { 
     echo 'ok'; 
    } 

    return; 
} 

回答

0

您所遇到的是Validator類的可接受行爲。這裏的規則的確切的代碼(在寫這篇文章的時間):

return preg_match('/^[\pL\pN_-]+$/u', $value); 

enables UTF-8 supportu修改。 \pL\pN然後是unicode character properties,它們分別與字母和數字相匹配(類似於您可能已經習慣的\w\d)。

我不確切地知道你要驗證哪些數據,但UTF-8支持對你的應用程序是一件好事。也就是說,如果您想創建更適合自己的規則,Validator::extend()就非常適合。

+0

謝謝,顯然在線API文檔不是最新的。雖然UTF-8支持是好事,但有時只接受a-z0-9可能是首選,就像用戶名一樣。 –

+0

是的 - 使用任何驗證是你的應用程序的那部分必要的。有時這意味着UTF-8,其他的不是那麼多。 –

3

不知道這個,但你可以註冊一個自定義的驗證規則,只允許ascii字符

Validator::extend('asciiOnly', function($attribute, $value, $parameters) 
{ 
    return !preg_match('/[^x00-x7F]/i', $value); 
}); 

所以,你可以使用類似這樣

array('username' => 'required|asciiOnly|alpha_dash'); 

它可以工作禁止/使非ASCII字符無效(not tested)。