Yud*_*Yud 46 ruby regex ruby-on-rails
我正在练习Ruby和正则表达式删除某些不需要的字符.例如:
input = input.gsub(/<\/?[^>]*>/, '')
Run Code Online (Sandbox Code Playgroud)
对于特殊字符,例如☻或™:
input = input.gsub('&#', '')
Run Code Online (Sandbox Code Playgroud)
这只留下数字,好的.但这仅在用户输入特殊字符作为代码时才有效,如下所示:
™
Run Code Online (Sandbox Code Playgroud)
我的问题: 如果用户输入没有代码的特殊字符,我如何删除特殊字符,如下所示:
™ ?
Run Code Online (Sandbox Code Playgroud)
Can*_*der 110
首先,我认为定义什么构成"正确的输入"并删除其他所有内容可能更容易.例如:
input = input.gsub(/[^0-9A-Za-z]/, '')
Run Code Online (Sandbox Code Playgroud)
如果那不是你想要的(你想支持非拉丁字母等),那么我认为你应该列出你要删除的字形(如™或☻),并逐个删除它们因为很难以编程方式区分中文,阿拉伯语等字符和象形文字.
最后,您可能希望通过转换为HTML转义序列或从HTML转义序列转换来规范化您的输入.
Mat*_*kel 10
如果您只想要ASCII字符,那么您可以使用:
original = "aøbauhrhræoeuacå"
cleaned = ""
original.each_byte { |x| cleaned << x unless x > 127 }
cleaned # => "abauhrhroeuac"
Run Code Online (Sandbox Code Playgroud)
您可以匹配所需的所有字符,然后将它们连接在一起,如下所示:
original = "aøbæcå"
stripped = original.scan(/[a-zA-Z]/).to_s
puts stripped
Run Code Online (Sandbox Code Playgroud)
哪个输出 "abc"
由Can BerkGüder回答启发的一种更简单的方法是:
为了删除特殊字符:
input = input.gsub(/\W/, '')
Run Code Online (Sandbox Code Playgroud)
为了保留文字字符:
input = input.scan(/\w/)
Run Code Online (Sandbox Code Playgroud)
最后输入是一样的!尝试:http : //rubular.com/