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