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

ssc*_*rus 4 string ruby-on-rails ruby-on-rails-3

有没有一种简单的方法将以下逻辑应用于Rails中的字符串?

if string does NOT end with '.' then add '.'
if string does NOT begin with 'http://' then add 'http://'.
Run Code Online (Sandbox Code Playgroud)

当然,有人可能会这样做:

string[0..6] == 'http://' ? nil : (string = 'http://' + string)
Run Code Online (Sandbox Code Playgroud)

但它有点笨重,它会错过https://替代方案.是否有更好的Rails方法来做到这一点?

pdu*_*uey 14

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

string << '.' unless string.end_with?( '.' )
string =  'http://' << string unless string.start_with?( 'http://' )
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*win 6

就像是

string = "#{string}." unless string.match(/\.$/)
string = "http://#{string}" unless string.match(/^https?:\/\//)
Run Code Online (Sandbox Code Playgroud)

应该管用.