文字列の先頭の空白を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
アンカー 、および \p{Space}
character propertylstrip
をエミュレートします。先頭と末尾の両方の空白を削除するには、次を使用します。
2.0.0p353 :007 > "\u00a0Bagsværd\u00a0".gsub(/\A\p{Space}*|\p{Space}*\z/, '')
=> "Bagsværd"
文字列の最初の文字はnot空白です
" Bagsværd".bytes
[194, 160, 66, 97, 103, 115, 118, 195, 166, 114, 100]
" Bagsværd".chars[0].ord
=> 160
これは U+00A0
ノーブレークスペース。質問の編集可能な形式は文字を保持するため、これを伝えることができます(レンダリングされた SO投稿から切り取って貼り付けようとする人は複製できませんが)あなたの問題)
strip
がスペースを削除しない最も可能性の高い方法は、それが実際にはスペースではなく、改行しないスペースである場合です。
あなたのマシンでこれを試してください:
# encoding: utf-8
" Bagsværd".chars.map(&:ord)
私の場合、Ruby 2.0.0p353:
# => [160, 66, 97, 103, 115, 118, 230, 114, 100]
最初の文字はスペースか何か他のものです。\u00af( ノーブレークスペース )
これにより、同じ結果が得られる可能性があります。
#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]