Iva*_*van 10 ruby string ruby-on-rails diacritics
有一个非常类似的问题.其中一个解决方案使用如下代码:
string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s
Run Code Online (Sandbox Code Playgroud)
这会产生奇迹,直到你注意到它还会移除空格,圆点,破折号以及谁知道还有什么.
我不是很确定第一个代码是如何工作的,但它是否可以仅剥离重音符号?或至少给出一个保留的字符列表?我对regexps的了解很少,但我尝试过(无济于事):
/[^\-x00-\x7F]/n # So it would leave the dash alone
Run Code Online (Sandbox Code Playgroud)
我要做这样的事情:
string.mb_chars.normalize(:kd).gsub('-', '__DASH__').gsub
(/[^x00-\x7F]/n, '').gsub('__DASH__', '-').to_s
Run Code Online (Sandbox Code Playgroud)
残暴?是...
我也尝试过:
iconv = Iconv.new('UTF-8', 'US-ASCII//TRANSLIT') # Also tried ISO-8859-1
iconv.iconv 'Café' # Throws an error: Iconv::IllegalSequence: "é"
Run Code Online (Sandbox Code Playgroud)
请帮忙?
bob*_*nce 11
它还可以删除空格,圆点,短划线以及谁知道还有什么.
它不应该.
string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s
Run Code Online (Sandbox Code Playgroud)
您输入错误,在x00之前应该有反斜杠,以引用NUL字符.
/[^\-x00-\x7F]/n # So it would leave the dash alone
Run Code Online (Sandbox Code Playgroud)
你在'\'和'x'之间放了' - ',这将打破对空字符的引用,从而打破范围.
我会用这个transliterate
方法。请参阅http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-transliterate