我正在构建Rails 5应用程序。 在这个应用程序中,我需要将字符串转换为整数。
字符串看起来像这样:
11 454
或
8 080
当我尝试下面的代码时,我可以删除空格,然后删除.to_i
"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
结果证明这是一个不间断的空间,并通过(如下选择的答案中所建议的)解决了该问题:
value.gsub("\u00A0", "")
答案 0 :(得分:4)
正如the documentation所说,/\s/
等效于字符类/[ \t\r\n\f\v]/
。换句话说,/\s/
是空格,制表符,回车符,换行符,换页符或垂直制表符。
但是,您有一个U+00A0 NO-BREAK SPACE字符,该字符不在与/\s/
匹配的字符列表中。
一种更好的选择是与/\p{Blank}/
或/\p{Space}/
之类的Unicode字符属性进行匹配。