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