从 Ruby 变量中去除空格的万无一失的方法?
Foolproof way to strip whitespace from a Ruby variable?
我在 Rails 4.2.7 上使用 Ruby。我无法从变量中剥离白色 space。分不清是什么白space。有万无一失的剥离方法吗?当我从某个变量剪切和粘贴时,我无法去除白色的 space 但是,当我输入 space 时,一切正常。在下面查看我的控制台:
2.3.0 :004 > test = " 21"
=> " 21"
2.3.0 :005 > test.strip
=> " 21"
我从其他来源剪切和粘贴了,白色 space 没有被剥离。有什么办法可以为我的变量提供某种万无一失的剥离方法吗?
尝试使用正则表达式
test.gsub(/\A\s*(\S(.*\S)?)?\s*\z/,'')
奇怪的(\S(.\S)?)?中间的部分捕获 \A\s <- 开头的空格和 \s*\z <- 结尾的空格
之间的文本
您可能有一个非 ASCII Unicode 空白字符,很可能是 0x00A0:
> test = "\u00A021"
=> " 21"
> test.strip
=> " 21"
和 String#strip
只有(目前)知道 ASCII 空白:
strip → new_str
[...]
Whitespace is defined as any of the following characters: null, horizontal tab, line feed, vertical tab, form feed, carriage return, space.
您可以通过 String#gsub
and the Space
character property 手动完成:
> test = "\u00A0 21 \t\u00a0"
=> " 21 \t "
> test.gsub(/\A\p{Space}+|\p{Space}+\z/, '')
=> "21"
您不能使用普通的 \s
或 \S
来处理 UTF-8 或 Unicode 中的扩展字符。相反,我会做这样的事情:
" 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.
我在 Rails 4.2.7 上使用 Ruby。我无法从变量中剥离白色 space。分不清是什么白space。有万无一失的剥离方法吗?当我从某个变量剪切和粘贴时,我无法去除白色的 space 但是,当我输入 space 时,一切正常。在下面查看我的控制台:
2.3.0 :004 > test = " 21"
=> " 21"
2.3.0 :005 > test.strip
=> " 21"
我从其他来源剪切和粘贴了,白色 space 没有被剥离。有什么办法可以为我的变量提供某种万无一失的剥离方法吗?
尝试使用正则表达式
test.gsub(/\A\s*(\S(.*\S)?)?\s*\z/,'')
奇怪的(\S(.\S)?)?中间的部分捕获 \A\s <- 开头的空格和 \s*\z <- 结尾的空格
之间的文本您可能有一个非 ASCII Unicode 空白字符,很可能是 0x00A0:
> test = "\u00A021"
=> " 21"
> test.strip
=> " 21"
和 String#strip
只有(目前)知道 ASCII 空白:
strip → new_str
[...]Whitespace is defined as any of the following characters: null, horizontal tab, line feed, vertical tab, form feed, carriage return, space.
您可以通过 String#gsub
and the Space
character property 手动完成:
> test = "\u00A0 21 \t\u00a0"
=> " 21 \t "
> test.gsub(/\A\p{Space}+|\p{Space}+\z/, '')
=> "21"
您不能使用普通的 \s
或 \S
来处理 UTF-8 或 Unicode 中的扩展字符。相反,我会做这样的事情:
" 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.