Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 删除字符串中的空白,然后转换为整数_Ruby - Fatal编程技术网

Ruby 删除字符串中的空白,然后转换为整数

Ruby 删除字符串中的空白,然后转换为整数,ruby,Ruby,我正在构建一个Rails 5应用程序。 在这个应用程序中,我需要将字符串转换为整数 字符串可以如下所示: 11 454 或 当我尝试下面的代码时,我可以删除空白,然后 "8 008".gsub(/\s+/, "") => "8008" 但是,当我尝试另一个数字时,它不会删除空白 "11 301".gsub(/\s+/, "") => "11 301" 在转换为整数之前,我需要先删除空格,否则我只会得到第一个数字,例如8或11 我做错了什么 已更新 有时有效,有时无效 2

我正在构建一个Rails 5应用程序。 在这个应用程序中,我需要将字符串转换为整数

字符串可以如下所示:

11 454

当我尝试下面的代码时,我可以删除空白,然后

"8 008".gsub(/\s+/, "")
 => "8008" 
但是,当我尝试另一个数字时,它不会删除空白

"11 301".gsub(/\s+/, "")
 => "11 301" 
在转换为整数之前,我需要先删除空格,否则我只会得到第一个数字,例如8或11

我做错了什么

已更新

有时有效,有时无效

2.4.2 :103 > "11 301".gsub(/\s+/, "")
 => "11301" 
2.4.2 :104 > "11 301".codepoints
 => [49, 49, 160, 51, 48, 49] 
2.4.2 :105 > "11 301".gsub(/\s+/, "")
 => "11 301" 
2.4.2 :106 > 
更新2

事实证明,这是一个不间断的空间,并通过以下所选答案解决了该问题:

如上所述,
/\s/
相当于字符类
/[\t\r\n\f\v]/
。换句话说,
/\s/
是空格、制表符、回车符、换行符、换行符或垂直制表符

但是,您有一个字符,它不在与
/\s/
匹配的字符列表中

更好的替代方法是匹配Unicode字符属性,如
/\p{Blank}/
/\p{Space}/
/\s/
相当于字符类
/[\t\r\n\f\v]/
。换句话说,
/\s/
是空格、制表符、回车符、换行符、换行符或垂直制表符

但是,您有一个字符,它不在与
/\s/
匹配的字符列表中


更好的替代方法是匹配Unicode字符属性,例如
/\p{Blank}/
/\p{Space}/
它在我的计算机上工作:
“11 301”。gsub(/\s+/,“”)#=>“11301”
您确定它是计算机上
11
301
之间的常规空格吗?无法复制。什么是
“11 301”。代码点
?代码点是:[56,160,48,48,56]@mrzasa如何检查类型?我已更新了答案。有时有效,有时无效!非常奇怪它在我的电脑上工作:
“11 301”。gsub(/\s+/,“”)#=>“11301”
你确定它是电脑上
11
301
之间的常规空白吗?无法复制。什么是
“11 301”。代码点
?代码点是:[56,160,48,48,56]@mrzasa如何检查类型?我已更新了答案。有时有效,有时无效!非常奇怪的参考:
[56,160,48,48,56].map(&:chr)=[“8”、“\xA0”、“0”、“0”、“8”]
不幸的是,这仍然是相同的结果(一个字符串):value.gsub('/\p{Blank}/','')。“我也试过空间了。”马克·丹尼:很奇怪。它对我有用。我知道Unicode数据库会在Ruby中定期更新,因此这取决于版本,但U+00A0在Ruby出现之前就已经使用Unicode了,所以我怀疑这是个问题。请注意,您的解决方案仅适用于此特定角色。每当下一个空格字符出现时,它将以完全相同的方式中断。例如,请参见询问者使用中文空格字符的位置。参考:
[56,160,48,48,56]。map(&:chr)==[“8”、“\xA0”、“0”、“0”、“8”]
这仍然是相同的结果(字符串):value.gsub('/\p{Blank}/','')。“我也试过空间了。”马克·丹尼:很奇怪。它对我有用。我知道Unicode数据库会在Ruby中定期更新,因此这取决于版本,但U+00A0在Ruby出现之前就已经使用Unicode了,所以我怀疑这是个问题。请注意,您的解决方案仅适用于此特定角色。每当下一个空格字符出现时,它将以完全相同的方式中断。例如,请参见询问者使用中文空格字符的位置。
2.4.2 :103 > "11 301".gsub(/\s+/, "")
 => "11301" 
2.4.2 :104 > "11 301".codepoints
 => [49, 49, 160, 51, 48, 49] 
2.4.2 :105 > "11 301".gsub(/\s+/, "")
 => "11 301" 
2.4.2 :106 > 
value.gsub("\u00A0", "")