Я попытался strip
ведущую пробельные строки:Почему полоса не удаляет ведущие пробелы?
" Bagsværd".strip # => " Bagsværd"
я ожидаю его вернуть "Bagsværd"
вместо этого.
Я попытался strip
ведущую пробельные строки:Почему полоса не удаляет ведущие пробелы?
" Bagsværd".strip # => " Bagsværd"
я ожидаю его вернуть "Bagsværd"
вместо этого.
Где строка " Bagsværd"
взялось?
Вполне вероятно, что символ пробела в начале строки не является «нормальным» пространство, но неразрывный пробел (U + 00A0):
2.0.0p353 :001 > " Bagsværd".strip
=> "Bagsværd"
2.0.0p353 :002 > "\u00a0Bagsværd".strip
=> " Bagsværd"
Вы можете удалить его с gsub
скорее чем strip
:
2.0.0p353 :003 > "\u00a0Bagsværd".gsub(/\A\p{Space}*/, '')
=> "Bagsværd"
Это использует \A
anchor и \p{Space}
character property подражать lstrip
. Для того, чтобы поломать как верхние, так и конечные пробелы, используйте:
2.0.0p353 :007 > "\u00a0Bagsværd\u00a0".gsub(/\A\p{Space}*|\p{Space}*\z/, '')
=> "Bagsværd"
+1 для использования '\ p {Space}'. Альтернативой является использование набора символов Posix '[[: space:]]': '" Bagsværd "[/ [[: space:]] /] # =>" \ u00A0 "'. –
Это исправлено. Большое вам спасибо за информацию! – Severin
вынос здесь A> операция по струне против UTF-8 (или -16 и т. Д.) Отстой, по http://mortoray.com/2013/11/27/the-string-type-is-broken/, и B> если ваша операция по строкам завершилась неудачно, отключите «Bagsværd» .bytes', чтобы увидеть, действительно ли ведущее пространство является '32'! – Phlip
Первый символ в строке является не пробельные
" Bagsværd".bytes
[194, 160, 66, 97, 103, 115, 118, 195, 166, 114, 100]
" Bagsværd".chars[0].ord
=> 160
U+00A0
Это не прорыв пространства. Заметьте, я мог бы сказать это, потому что редактируемая форма вопроса сохраняет характер (в то время как любой, кто пытается вырезать и вставлять из , вынесенный SO post не сможет реплицировать вашу проблему)
Следовательно, «new-f *** s не может tri-force» C-; – Phlip
Хорошее мышление, Нейл, и хорошо знать. –
Является первым символом пробела или что-то другое, например \ U00af (Non-breaking space)
Это может дать тот же результат:
#encoding: utf-8
puts " Bagsværd".strip #Bagsværd
a = "\u00A0Bagsværd"
puts a # Bagsværd
puts a.strip # Bagsværd
#Maybe the example works not, when the code is posted/taken via cut+paste
b = ' Bagsværd'
p a == b #true
Вы можете проверить, что вы с:
a = "\u00A0Bagsværd"
b = ' Bagsværd'
p a.codepoints.to_a #[160, 66, 97, 103, 115, 118, 230, 114, 100]
p b.codepoints.to_a #[32, 66, 97, 103, 115, 118, 230, 114, 100]
Наиболее вероятным способом, что strip
не удаляя пространство , - это когда это не просто пространство, но является неразрывным пространством.
Попробуйте это на вашей машине:
# encoding: utf-8
" Bagsværd".chars.map(&:ord)
На шахте, используя Рубин 2.0.0p353:
# => [160, 66, 97, 103, 115, 118, 230, 114, 100]
На самом деле, если вы редактируете OP, вы получите его исходную строку с неразрывным пространством. В то время как вырезать и вставлять из обработанного сообщения, а SO преобразует его в обычное пространство. –
Да, я просто сделал это и, конечно, «ну, вот оно. –
Это странно. Я запускаю Ruby 2.0.0p247 и Rails 4.0.0, а «Bagsværd» .strip возвращает «Bagsværd» для меня. То же самое происходит в Ruby 1.9.3p484 с Rails 3.2.13. Вы пробовали это в другой версии Ruby или Rails? –
'strip' удаляет ведущие пробелы на каждом интерпретаторе, который я видел, вы получаете тот же результат при вставке этого в новую консоль IRB? – carpeliam
Нет. Я также обновил до 2.0.0p353 из-за проблем с безопасностью с p272 (который я использовал ранее). И да, я перезагрузил консоль много раз, но все равно получаю вышеупомянутый вывод. – Severin