2013-10-15 35 views
1

我将在以下任何格式的越来越网址:也就是说,特殊字符和数字的从url获取参数并删除任何非字母字符和数字?

- ?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 

我不是在正则表达式中那么好,我真的很感谢所有帮助解决这一问题

+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

检查这一点,

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" 
0

我会强烈建议检查出http://rubular.com/如果您想了解更多关于正则表达式。它允许你使用正则表达式和一个字符串来显示匹配。

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

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