从Ruby变量中剥离空格的万无一失的方法?

时间:2016-09-14 16:49:02

标签: ruby-on-rails ruby whitespace strip

我使用Ruby on Rails 4.2.7。我无法从变量中剥离空白区域。我不知道它是什么样的白色空间。有一种万无一失的剥离方法吗?当我从某个变量剪切和粘贴时,我无法剥离空白区域,但是当我键入空格时,一切都没问题。请参阅下面的我的控制台:

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

我已从其他来源剪切并粘贴,并且没有剥离空白区域。有没有办法可以为我的变量设置某种万无一失的条形方法?

3 个答案:

答案 0 :(得分:5)

您可能有非ASCII Unicode空白字符,很可能是0x00A0:

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

String#strip仅(当前)知道ASCII空格:

  

strip→new_str
  [...]

     

空格被定义为以下任何字符:null,水平制表符,换行符,垂直制表符,换页符,回车符,空格。

您可以使用String#gsubSpace character property

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

答案 1 :(得分:1)

您无法使用普通\s\S来处理UTF-8或Unicode中的扩展字符。相反,我会做这样的事情:

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

或者也许:

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

参见" Character Classes"在Regexp文档中。

您可以使用ord.to_s(16)来确定角色的内容:

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

或者通过在可以显示实际序数值的编辑器中查看它,例如Vim。

答案 2 :(得分:-2)

尝试使用正则表达式

{{1}}

怪异的(\ S(。 \ S)?)?中间部分捕获文本\ A \ s < - 开头的空格和\ s * \ z< - 末尾的空格