Как удалить неразрывный пробел в Ruby - PullRequest
24 голосов
/ 01 февраля 2011

У меня есть строка, которая выглядит следующим образом:

d = "foo\u00A0\bar"

Когда я проверяю длину, она говорит, что это 7 символов в длину.Я проверил онлайн и обнаружил, что это неразрывный пробел.Может ли кто-нибудь показать мне, как удалить все неразрывные пробелы в строке?

Ответы [ 4 ]

29 голосов
/ 01 февраля 2011
irb(main):001:0> d = "foo\u00A0\bar"
=> "foo \bar"
irb(main):002:0> d.gsub("\u00A0", "")
=> "foo\bar"
26 голосов
/ 24 марта 2016

В случае, если вас не заботит конкретно неразрывный пробел, а есть любой «специальный» символ пробела юникода, который может появиться в вашей строке, вы можете заменить его, используя выражение скобки POSIX для пробела:

s.gsub(/[[:space:]]/, '')

Эти выражения в скобках (в отличие от таких сопоставлений, как \s) не только соответствуют символам ASCII, но и всем символам юникода класса.

Подробнее см. Рубиновая документация

3 голосов
/ 29 октября 2015

Это старая тема, но, возможно, она кому-нибудь поможет. Я обнаружил, что искал решение той же проблемы, когда обнаружил, что полоса не выполняет свою работу. Я проверил методом ord что это был за символ и использовал chr, чтобы представить его в gsub

2.2.3 :010 > 160.chr("UTF-8")
 => " " 
2.2.3 :011 > 160.chr("UTF-8").strip
 => " " 
2.2.3 :012 > nbsp = 160.chr("UTF-8")
 => " " 
2.2.3 :013 > nbsp.gsub(160.chr("UTF-8"),"")
 => ""

Я не мог понять, почему strip не удаляет что-то, что выглядело как пробел для меня, поэтому я проверил здесь , что на самом деле ASCII 160.

2 голосов
/ 24 апреля 2012

d.gsub("\u00A0", "") не работает в Ruby 1.8.Вместо этого используйте d.gsub(/\302\240/,"")

См. http://blog.grayproductions.net/articles/understanding_m17n, чтобы узнать больше о различиях кодировки символов между 1,8 и 1,9.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...