Убедитесь, что строка начинается или заканчивается другой строкой в ​​Rails - PullRequest
4 голосов
/ 17 сентября 2011

Есть ли простой способ применить следующую логику к строке в 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 ]

14 голосов
/ 17 сентября 2011

Регулярные выражения являются ключевыми, но для простого сопоставления статических строк вы можете использовать вспомогательные функции, которые работают быстрее.Кроме того, вы можете использовать << вместо +, что также быстрее (хотя, вероятно, не имеет значения). </p>

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

примечание, s будет содержать правильное значение, но возвращаемое значение равно nil, если строка былане изменилось.не так, как вы, но лучше не включать в условное.

6 голосов
/ 17 сентября 2011

Что-то вроде

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

должно работать.

3 голосов
/ 17 сентября 2011

Они будут работать в 1.9:

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

Первый из них не будет работать в 1.8, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...