从网址获取参数并删除任何非字母字符和数字?

时间:2013-10-15 09:14:47

标签: ruby ruby-on-rails-3.2

我将使用以下任何格式获取网址:

- ?M=Foo bar
- ?M=Foo%20bar
- ?M=%20Foo_bar
- ?M=Foo bar?
- ?M=F00_bar
- ?M=Foo#1bar_do

或单词,特殊字符和数字的任意组合。

我可以使用

简单地获取值
 params[:M]

问题:

但是,现在我想转换输出并将其存储到变量'm',如:

 m = FooBar

1)在这里,忽略所有其他字符((下划线)_,#1,空格,?等)和数字,只取字母。

2)将结果组合成如下形式:

FooBar
FooBarDo

我在正则表达方面不擅长,所以,我将非常感谢您解决此问题的任何帮助

3 个答案:

答案 0 :(得分:2)

以下是使用scan

进行此操作的一种方法
m = "Foo%20bar"
m.scan(/[A-Za-z]/).join #=> Foobar

m = "Foo#1bar_do"
m.scan(/[A-Za-z]/).join #=> Foobardo

m = "F00_bar"
m.scan(/[A-Za-z]/).join #=> Fbar

所以,在你的情况下,你会使用类似的东西:

params[:M].scan(/[A-Za-z]/).join

答案 1 :(得分:1)

检查一下,

m.scan(/[a-z]+/i).join

>> m = "Foo bar"
=> "Foo bar"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "Foo%20bar"
=> "Foo%20bar"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "%20Foo_bar"
=> "%20Foo_bar"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "Foo bar?"
=> "Foo bar?"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "F00_bar"
=> "F00_bar"
>> m.scan(/[a-z]+/i).join
=> "Fbar"
>> m = "Foo#1bar_do"
=> "Foo#1bar_do"
>> m.scan(/[a-z]+/i).join
=> "Foobardo"

答案 2 :(得分:0)

如果您想了解有关正则表达式的更多信息,我强烈建议您查看http://rubular.com/。它允许你使用正则表达式和字符串来显示匹配。

其他答案都很好但你也可以使用gsub。

"Foo#1bar_do".gsub(/\p{^Alpha}/, "") #=> "Foobardo"
"Foo%20bar".gsub(/\p{^Alpha}/, "")   #=> "Foobar"