2011-03-10 88 views
0

我想从字符串的开头和结尾去掉非单词字符。我目前得到的功能是:有没有办法让红宝石1.9 unicode正则表达式行为在红宝石1.8(与轨道2.3)?

$KCODE='UTF-8' 

... 

def clean_string str 
    str && str.gsub(/\s+/msiu, ' ').gsub(/\A\W*|\W*\Z/msiu,'') 
end 

它在大多数情况下都可以使用,但它在磅的标志上失效。

>> puts clean_string('£5.00') 
£5.00 

我读过,在红宝石1.8这是每规格的行为;所有非ascii字符都被认为是单词字符。但这不是我想要的行为;我只希望单词字符被认为是单词字符,因为它们是1.9中的红宝石。

有没有办法在ruby 1.8(使用rails 2.3.10)中获得ruby 1.9 unicode regex行为?

回答

2

我终于发现,您可以在使用做:

require 'oniguruma' 

def clean_string str 
    squishy_regexp = Oniguruma::ORegexp.new('\s+',  'msi', 'utf8') 
    clean_regexp = Oniguruma::ORegexp.new('^\W*|\W*$', 'msi', 'utf8') 

    if str 
    str = squishy_regexp.gsub(str, ' ') 
    str = clean_regexp.gsub(str, '') 
    end 

    str 
end 

>> puts clean_string('£5.00') 
5.00