我正在练习Ruby和正则表达式来删除某些不需要的字符。例如:如何删除特殊字符?
input = input.gsub(/<\/?[^>]*>/, '')
和特殊字符,例如☻或:
input = input.gsub('&#', '')
这样,只有数字,确定。但是,如果用户输入特殊字符作为密码,这样才能这样:
™
我的问题: 如何,如果用户输入特殊字符不代码,这样我可以删除特殊字符:
™ ☻
我正在练习Ruby和正则表达式来删除某些不需要的字符。例如:如何删除特殊字符?
input = input.gsub(/<\/?[^>]*>/, '')
和特殊字符,例如☻或:
input = input.gsub('&#', '')
这样,只有数字,确定。但是,如果用户输入特殊字符作为密码,这样才能这样:
™
我的问题: 如何,如果用户输入特殊字符不代码,这样我可以删除特殊字符:
™ ☻
首先,我认为可能更容易定义什么构成“正确的输入”并删除其他所有内容。例如:
input = input.gsub(/[^0-9A-Za-z]/, '')
如果这不是你想要的(要支持非拉丁字母,等等),那么我认为你应该让你想删除(如™或字形的列表☻ ),并逐个删除它们,因为很难以编程方式区分中文,阿拉伯文等字符和象形文字。
最后,您可能希望通过转换为HTML转义序列或从HTML转义序列转换来标准化您的输入。
可以匹配所有你想要的字符,然后加入他们在一起,像这样:
original = "aøbæcå"
stripped = original.scan(/[a-zA-Z]/).to_s
puts stripped
哪个输出
如果你只是想ASCII字符,那么你可以使用:
original = "aøbauhrhræoeuacå"
cleaned = ""
original.each_byte { |x| cleaned << x unless x > 127 }
cleaned # => "abauhrhroeuac"
您可以使用parameterize:
'@!#$%^&*()111'.parameterize
=> "111"
一个更简单的方式来做到由灿伯克Güder回答这个inspirated是:
为了删除特殊字符:
input = input.gsub(/\W/, '')
为了保持单词字符:
input = input.scan(/\w/)
在最后输入是一样的!试试看:http://rubular.com/
谢谢,我认为创建允许的字符列表更容易。 – Yud 2009-04-10 12:45:51
谢谢!我使用了`input = input.gsub(/ [^ 0-9A-Za-z] /,'')`来保持字符串不变。它在这些特殊字符的位置给了我一些额外的空间。 – Surya 2012-04-30 12:52:29