2016-09-14 6 views
0

私はRuby on Rails 4.2.7を使用しています。変数から空白を取り除くことができません。私はそれがどのような空白であるかを知ることはできません。簡単なストリップ方法はありますか?特定の変数から切り取って貼り付けると、空白を取り除くことはできませんが、スペースを入力するとすべてが問題ありません。以下の私のコンソールを参照してください:Ruby変数から空白を削除するための確実な方法はありますか?

2.3.0 :004 > test = " 21" 
=> " 21" 
2.3.0 :005 > test.strip 
=> " 21" 

私は別のソースから切り取って貼り付け、空白は取り除かれていません。私の変数のための何らかの安全なストリップメソッドを持つことができる方法はありますか?

+0

ソースまたはサンプルを提供できますか? –

+0

try 'split.join' –

+1

私は試してみると自分のフォールトを複製しないので、そこにはどんな種類のスペース文字もあなたの質問にコピーされていません。 'test.bytes'と' test.encoding'の結果を質問に追加できますか? –

答えて

3

であなたは、おそらくほとんどの場合、非ASCII Unicodeの空白文字を持っています0x00A0:

> test = "\u00A021" 
=> " 21" 
> test.strip 
=> " 21" 

String#stripは(現時点では)ASCIIの空白を知っている:

ストリップ→new_str
[...]

空白は、ヌル、水平タブ、改行、垂直タブ、改ページ、改行、スペースのいずれかの文字として定義されます。

あなたが String#gsubSpace character propertyと手でそれを行うことができます

> test = "\u00A0 21 \t\u00a0" 
=> "  21 \t " 
> test.gsub(/\A\p{Space}+|\p{Space}+\z/, '') 
=> "21" 
-2

は正規表現

test.gsub(/\A\s*(\S(.*\S)?)?\s*\z/,'\1') 

奇妙な(\ S(S \。)?)を試してみてください?先頭に空白や\ sは* \ zの< - - 真ん中の部分は、\ A \ sの <間のテキストをキャッチ空白エンド

+1

しかし、 '\ s'は依然としてASCII対応であり、' String#strip'は任意のASCII空白を扱います。 –

+1

'\ s'と' \ S'はUnicode文字を捕捉するのに十分ではありません。それらはhttp://ruby-doc.org/core-2.3.1/Regexp.html#class-Regexp-label-Character+Classesで定義されています –

1

あなたは、UTF-8またはUnicodeの拡張文字を処理するために、通常の\s\Sを使用することはできません。

" 21".gsub(/[[:space:]]+/, '') # => "21" 

または多分:

" 21".gsub(/[[:blank:]]+/, '') 

見る "Character Classes" 正規表現のドキュメントの代わりに、私はこのような何かをしたいです。

あなたは文字がそれにord.to_s(16)を使用しているかを把握することができます

>> test = " 21" 
" 21" 
>> test.ord 
160 
>> test.ord.to_s(16) 
"a0" 
>> test[0].ord.to_s(16) 
"a0" 

や、Vimのような実際序数値を示すことができるエディタでを見て。

関連する問題