Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何删除特殊字符?_Ruby On Rails_Ruby_Regex - Fatal编程技术网

Ruby on rails 如何删除特殊字符?

Ruby on rails 如何删除特殊字符?,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我正在用Ruby和regex练习删除某些不需要的字符。例如: input = input.gsub(/<\/?[^>]*>/, '') input = input.gsub(/[^0-9A-Za-z]/, '') 这只留下数字,好吗。但这仅在用户输入特殊字符作为代码时有效,如: &#153; ™ ☻ original = "aøbæcå" stripped = original.scan(/[a-zA-Z]/).to_s puts stripped 我的问题:

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

input = input.gsub(/<\/?[^>]*>/, '')
input = input.gsub(/[^0-9A-Za-z]/, '')
这只留下数字,好吗。但这仅在用户输入特殊字符作为代码时有效,如:

&#153;
™ ☻
original = "aøbæcå"
stripped = original.scan(/[a-zA-Z]/).to_s
puts stripped
我的问题: 如果用户输入特殊字符而没有代码,我如何删除特殊字符,如下所示:

&#153;
™ ☻
original = "aøbæcå"
stripped = original.scan(/[a-zA-Z]/).to_s
puts stripped

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

&#153;
™ ☻
original = "aøbæcå"
stripped = original.scan(/[a-zA-Z]/).to_s
puts stripped

它输出“abc”

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

input = input.gsub(/<\/?[^>]*>/, '')
input = input.gsub(/[^0-9A-Za-z]/, '')
如果这不是您想要的(您想要支持非拉丁字母,等等),那么我认为您应该列出一个要删除的glyph列表(例如™ 或☻), 然后一个接一个地删除它们,因为很难通过编程区分中文、阿拉伯文等字符和象形文字


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

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

original = "aøbauhrhræoeuacå" 
cleaned = ""
original.each_byte { |x|  cleaned << x unless x > 127   }
cleaned   # => "abauhrhroeuac"
original=“aøbauhrhræoeuacå”
已清理=“”
原始。每个|u字节{| x | 127}
清洁#=>“ABAUHRROEUAC”
您可以使用:


根据Can Berk Güder的回答,一个更简单的方法是:

要删除特殊字符,请执行以下操作:

input = input.gsub(/\W/, '')
input = input.scan(/\w/)
要保留单词字符,请执行以下操作:

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

最后输入是一样的!试试:

谢谢,我认为创建一个允许的字符列表更容易。谢谢!!我使用了
input=input.gsub(/[^0-9A-Za-z]/,“”)
保持字符串的原样。在这些特殊字符的位置上,它确实给了我一些额外的空格。请编辑您的答案,添加一个解释,说明您的代码是如何工作的,以及它是如何解决OP问题的。许多SO海报都是新手,不会理解您发布的代码。参数化:它会留下破折号。我使用'something-h'ere'.下划线.parameterize来解释它。您可以传递一个自定义分隔符来参数化:
string.parameterize(分隔符:'.')