2011-03-10 63 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