2015-01-17 22 views
0

我正在建立一些用戶配置文件,並希望添加到配置文件的社交鏈接,以便用戶可以鏈接到他們的,比如Steam,YouTube,Google+個人資料。Laravel表單文本字段驗證特定的網址?

所以我找不到任何方式驗證laravel中的特定網址。我想要一個用戶,如果他在蒸汽文本字段中設置鏈接以驗證給定的網址是否是steampowered.com的真正網址,或者是否要拋出網址無效的錯誤。

我已經閱讀了有關驗證的文檔,並且讀到有一個URL驗證,但正如我已經閱讀它只是驗證輸入,如果它被格式化爲url。所以基本上用戶可以發佈任何網址,它將被驗證。

是否有一個過濾器或一些額外的條件URL驗證特定的網址。所以只有當用戶在該字段中插入如:http://steamcommunity.com時,輸入字段纔有效。

如何能有人實現這一點,或者我必須寫舊的PHP正則表達式?

回答

1

你應該definetely編寫自己的自定義驗證,並使用正則表達式來驗證:

\Validator::extend('checkUrl', function($attribute, $value, $parameters) 
{ 
    $url = $parameters[0]; 
    //Your pattern, not pretending to be super precise, so it's up to you 
    $pattern = '/^((http|https)\:\/\/)?(www\.)?'.$url.'\..+$/' 
    if( preg_match($pattern,$value) 
    { 
     return true; 
    } 
    return false; 
}); 

,並利用它提供它作爲一個規則,您的驗證

$rules = [ 
    your_field => 'checkUrl:http://steamcommunity.com' 
]; 
1

這樣的事情不是內置的。你可以編寫一個custom validation rule,然後像你說的那樣使用正則表達式。

Validator::extend('steam_url', function($attribute, $value, $parameters) 
{ 
    $pattern = "#^https?://([a-z0-9-]+\.)*steamcommunity\.com(/.*)?$#"; 
    return !! preg_match($pattern, $value); 
}); 

用法:'url' => 'steam_url

或者更多的東西一般:

Validator::extend('domain', function($attribute, $value, $parameters) 
{ 
    $domain = $parameters[0]; 
    $pattern = "#^https?://([a-z0-9-]+\.)*".preg_quote($domain)."(/.*)?$#"; 
    return !! preg_match($pattern, $value); 
}); 

用法:'url' => 'domain:steamcommunity.com'

0

無論你的答案是正確的球員,但是我使用正則表達式從來不喜歡和我記得我在去年製作的網站上做了什麼以匹配網站網址,並將其與匹配到的地點不可能讓用戶輸入錯誤的網址,這也會匹配http和https。所以我最終的解決方案是使用parse_url方法,非常簡單,並感謝你的驗證器參數的例子,我也可以在多個不同的領域使用它。

這是我的最終代碼。

Validator::extend('checkUrl', function($attribute, $value, $parameters) { 

$url = parse_url($value, PHP_URL_HOST); 
return $url == $parameters[0]; 

編輯:還有更簡單的解決方案,而不是使用方法是否和返回或真或假,你可以使用回法要驗證選項。

return $url == $parameters[0]; 

這將被解析爲

if($url == $parameters[0]) { 
return true 
} else { 
return false 
}