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

5
有没有一种简单的方法在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个回答

16

正则表达式很重要,但对于简单的静态字符串匹配,您可以使用更快的辅助函数。另外,您可以使用 << 而不是 +,后者也更快(虽然可能不是问题)。

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

注意,变量s将包含正确的值,但如果字符串没有被改变,则返回值为nil。虽然你可能不会这样做,但最好不要在条件语句中使用它。


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版本中将不再适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接