2015-09-15 106 views
1

在註冊表中,我的用戶名只能包含a-z A-Z 0-9下劃線,破折號和圓點。所以我在AppServiceProvider的啓動方法中定義了一個自定義驗證器,如下所示:Laravel 5.1創建自定義驗證規則

Validator::extend('valid_username', function ($attribute, $value, $parameters) 
      { 
        return preg_match('[a-zA-Z0-9_\-\.]', $value); 
      } 

但驗證永遠不會通過。我做錯了什麼?

回答

1

它看起來OK,除了preg_match需要/在模式的開始和結束,而你也應該匹配字符串的開始/結束,以及告訴它匹配多個字符:

Validator::extend('valid_username', function ($attribute, $value, $parameters) 
{ 
    return preg_match('/^[a-zA-Z0-9_\-\.]+$/', $value); 
} 

您目前的模式只會確認這些字符中有一個,並非只有這些字符。

+0

現在它通過所有情況! –

+0

你是什麼意思?它傳遞給預期的情況,還是傳遞給用戶名如「'用戶名!」? – samlev

+0

非常感謝。有效。 –