web-dev-qa-db-ja.com

ストリップが先頭の空白を削除しないのはなぜですか?

文字列の先頭の空白をstripしようとしました。

" Bagsværd".strip # => " Bagsværd"

代わりに"Bagsværd"を返すことを期待しています。

25
Severin

文字列はどこにありましたか" 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" 
34
matt

文字列の最初の文字はnot空白です

" Bagsværd".bytes
[194, 160, 66, 97, 103, 115, 118, 195, 166, 114, 100]

" Bagsværd".chars[0].ord
 => 160

これは U+00A0ノーブレークスペース。質問の編集可能な形式は文字を保持するため、これを伝えることができます(レンダリングされた SO投稿から切り取って貼り付けようとする人は複製できませんが)あなたの問題)

4
Neil Slater

stripがスペースを削除しない最も可能性の高い方法は、それが実際にはスペースではなく、改行しないスペースである場合です。

あなたのマシンでこれを試してください:

# encoding: utf-8
" Bagsværd".chars.map(&:ord)

私の場合、Ruby 2.0.0p353:

# => [160, 66, 97, 103, 115, 118, 230, 114, 100]
2
the Tin Man

最初の文字はスペースか何か他のものです。\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]
0
knut