确保字符串在Rails中以另一个字符串开头或结尾

时间:2011-09-17 02:48:18

标签: ruby-on-rails string ruby-on-rails-3

是否有一种简单的方法可以将以下逻辑应用于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方法来做到这一点?

3 个答案:

答案 0 :(得分:13)

正则表达式是关键,但对于简单的静态字符串匹配,您可以使用更快的辅助函数。此外,您可以使用<<而不是+也更快(尽管可能不是一个问题)。

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

注意,s将包含正确的值,但如果字符串未更改,则返回值为nil。不是你愿意,但最好不要包含在条件中。

答案 1 :(得分:6)

这样的东西
string = "#{string}." unless string.match(/\.$/)
string = "http://#{string}" unless string.match(/^https?:\/\//)

应该有用。

答案 2 :(得分:3)

这些将在1.9中起作用:

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

第一个在1.8中不起作用。