ruby on rails-如何删除特殊字符?

我正在与Ruby和regex一起练习以删除某些不需要的字符。 例如:

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

对于特殊字符,例如☻或™:

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

这样就只剩下数字了。 但这仅在用户输入特殊字符作为代码时才有效,例如:

&#153;

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

™ ☻
Yud asked 2020-06-26T17:18:34Z
5个解决方案
110 votes

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

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

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

最后,您可能希望通过与HTML转义序列之间的转换来标准化输入。

Can Berk Güder answered 2020-06-26T17:19:02Z
10 votes

如果只需要ASCII字符,则可以使用:

original = "aøbauhrhræoeuacå" 
cleaned = ""
original.each_byte { |x|  cleaned << x unless x > 127   }
cleaned   # => "abauhrhroeuac"
Matthew Schinckel answered 2020-06-26T17:19:22Z
8 votes

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

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

输出"abc"

Magnar answered 2020-06-26T17:19:47Z
8 votes

您可以使用参数化:

'@!#$%^&*()111'.parameterize
 => "111" 
sts answered 2020-06-26T17:20:06Z
5 votes

受范伯克·古德(Van BerkGüder)的启发,更简单的方法是:

为了删除特殊字符:

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

为了保留字字符:

input = input.scan(/\w/)

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

Marco answered 2020-06-26T17:20:39Z
translate from https://stackoverflow.com:/questions/737475/how-can-i-delete-special-characters