2011-09-17 64 views
3

有沒有一種簡單的方法將以下邏輯應用於Rails中的字符串?確保一個字符串以Rails中的另一個字符串開頭或結尾

if string does NOT end with '.' then add '.' 
if string does NOT begin with 'http://' then add 'http://'. 

當然,有人可能會做這樣的事情:

string[0..6] == 'http://' ? nil : (string = 'http://' + string) 

但它是有點麻煩,它會錯過https://替代。有沒有更好的Rails方式來做到這一點?

回答

6

喜歡的東西

string = "#{string}." unless string.match(/\.$/) 
string = "http://#{string}" unless string.match(/^https?:\/\//) 

應該工作。

3

這些將在1.9工作:

s += '.' unless s[-1] == '.' 
s = 'http://' + s unless s[/^https?:\/\//] 

第一個將不會在1.8的工作,雖然。

12

正則表達式是關鍵,但對於簡單的靜態字符串匹配,您可以使用更快的助手函數。此外,您可以使用< <而不是+,這也更快(雖然可能不是問題)。

s << '.' unless s.end_with?('.') 
s = 'http://' << s unless s.start_with('http://') 

注意,s將包含正確的值,但如果字符串未被更改,則返回值爲零。不是你會,但最好不要包括在條件。

相關問題