我使用Ruby on Rails 4.2.7。我无法从变量中剥离空白区域。我不知道它是什么样的白色空间。有一种万无一失的剥离方法吗?当我从某个变量剪切和粘贴时,我无法剥离空白区域,但是当我键入空格时,一切都没问题。请参阅下面的我的控制台:
2.3.0 :004 > test = " 21"
=> " 21"
2.3.0 :005 > test.strip
=> " 21"
我已从其他来源剪切并粘贴,并且没有剥离空白区域。有没有办法可以为我的变量设置某种万无一失的条形方法?
答案 0 :(得分:5)
您可能有非ASCII Unicode空白字符,很可能是0x00A0:
> test = "\u00A021"
=> " 21"
> test.strip
=> " 21"
和String#strip
仅(当前)知道ASCII空格:
strip→new_str
[...]空格被定义为以下任何字符:null,水平制表符,换行符,垂直制表符,换页符,回车符,空格。
您可以使用String#gsub
和Space
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< - 末尾的空格