如何删除特殊字符?

时间:2009-04-10 12:25:02

标签: ruby-on-rails ruby regex

我正在练习使用Ruby和正则表达式删除某些不需要的字符。例如:

input = input.gsub(/<\/?[^>]*>/, '')

和特殊字符,例如☻或™:

input = input.gsub('&#', '')

这只留下数字,好吧。但这仅在用户输入特殊字符作为代码时才有效:

&#153;

我的问题: 如果用户输入没有代码的特殊字符,我如何删除特殊字符,如下所示:

™ ☻

5 个答案:

答案 0 :(得分:109)

首先,我认为定义“正确输入”的内容并删除其他所有内容可能更容易。例如:

input = input.gsub(/[^0-9A-Za-z]/, '')

如果这不是您想要的(您希望支持非拉丁字母等),那么我认为您应该列出要删除的字形(如™或☻),并删除它们 - 一个一个,因为很难以编程方式区分中文,阿拉伯语等字符和象形文字。

最后,您可能希望通过转换为HTML转义序列或从HTML转义序列转换来规范化您的输入。

答案 1 :(得分:10)

如果你只想要ASCII字符,那么你可以使用:

original = "aøbauhrhræoeuacå" 
cleaned = ""
original.each_byte { |x|  cleaned << x unless x > 127   }
cleaned   # => "abauhrhroeuac"

答案 2 :(得分:8)

您可以匹配所需的所有字符,然后将它们连接在一起,如下所示:

original = "aøbæcå"
stripped = original.scan(/[a-zA-Z]/).to_s
puts stripped

输出"abc"

答案 3 :(得分:7)

您可以使用parameterize

'@!#$%^&*()111'.parameterize
 => "111" 

答案 4 :(得分:4)

CanBerkGüder回答的一个更简单的方法就是:

要删除特殊字符:

input = input.gsub(/\W/, '')

为了保留单词字符:

input = input.scan(/\w/)

最后输入是一样的!试一下:http://rubular.com/