我正在练习使用Ruby和正则表达式删除某些不需要的字符。例如:
input = input.gsub(/<\/?[^>]*>/, '')
和特殊字符,例如☻或™:
input = input.gsub('&#', '')
这只留下数字,好吧。但这仅在用户输入特殊字符作为代码时才有效:
™
我的问题: 如果用户输入没有代码的特殊字符,我如何删除特殊字符,如下所示:
™ ☻
答案 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/