删除/替换字符串中的保留或无效URL字符

时间:2019-01-23 14:56:21

标签: ruby regex

我正在为我的应用创建sef url。我刚遇到一个错误,其中我的一个对象包含以下字符:

@#!*

我想要的输出是以下内容,其中保留/未保留之外的任何非法内容都将由下划线代替:

@_!*

我计划使用此正则表达式过滤不良字符:

[^]A-Za-z0-9_.~!*''();:@&=+$,/?#[%-]+

然后通过gsub

进行替换
'@#!*'.gsub!(/[^]_.~!*''();:@&=+$,/?#[%-]+/, '_')

但是什么也没有退还。这是怎么回事?

1 个答案:

答案 0 :(得分:0)

'<@#_!*>'.gsub(/[\[\]^A-Za-z0-9.~!*''();:@&=+$,\/?#%+-]/, '_')
  #=> "<_____>" 

'[',']'和'/'必须转义,'-'必须在字符类的开头或结尾,'^'不能在字符类的开头(字符类为由外部的[[和']'字符表示)。用''替换''没有意义,因此我没有在字符类中包含该字符。

您是否还希望替换“ <”和“>”?您确定字母和数字是“保留字符”吗?