как убрать пробел, но не символ utf-8 в ruby - PullRequest
1 голос
/ 22 февраля 2011

Я хочу запретить пользователям писать пустой комментарий (пробелы,   и т. Д.). поэтому я применяю следующее:

var.gsub(/^\s+|\s+\z|\s* \s*/.'')

Однако затем умный пользователь находит дыру, используя \302 или \240 символы Юникода, поэтому я отфильтровал и эти символы.

Затем я столкнулся с проблемой, когда ввел поддержку нескольких языков, и слово типа Déjà vu становится ошибкой. потому что часть символа à содержит \240. есть ли способ удалить пробелы, но оставить символы латинского алфавита нетронутыми?

1 Ответ

1 голос
/ 22 февраля 2011

Чтобы обойти это, используйте iconv для удаления недопустимых символов Юникода (например, \230 самостоятельно) перед использованием регулярного выражения для удаления пробелов:

require 'iconv'

var1 = "Déjà vu"
var2 = "\240"

ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
valid1 = ic.iconv(var1) # => "D\303\251j\303\240 vu" 
valid2 = ic.iconv(var2) # => ""
...