新手问题 Ruby 1.8 如何在正则中匹配所有国家语言的字符?

ibachue · 2013年03月04日 · 最后由 sevk 回复于 2013年03月05日 · 3251 次阅读

Hi all, 我们在设计一个正则表达式把输入的字符中的特殊符号全部过滤掉然后送到一个第三方服务上,由于这个第三方服务只给出了他们接受的字符,而没有给出他们不接受的字符,并且由于是多语言网站,需要支持各国语言。 以下是所有该第三方服务支持的字符:

letters
numbers
question mark (?)
dash (-)
single quote (')
period (.)
comma (,)
forward slash (/)
'at' sign (@)
ampersand (&)
parentheses [ ( or ) ]

当然其中的 letters 指的是所有国家语言的字符。 这里一个很尴尬的事情在于下划线 (_) 不在接受列表中,导致我唯一知道的\w不能匹配,因为\w不仅仅匹配所有字符数字,还匹配下划线。。 请教大家,该如何设计这个正则表达式呢?谢谢

/(?!_)[\w\d\?\-\'\.\,\/@&\(\)]/

#1 楼 @luikore 太强了 谢谢 正则的那个断言式实在好难懂哈~

#2 楼 @iBachue

其实只有 .net 的正则支持字符组减法:[\w-[_]]

不过实现字符组减法还有一招叫做 double negate: [^_[^\w\d\?\-\'\.\,\/@&\(\)]]

#3 楼 @luikore 这个貌似 Ruby 不支持嘛

(irb):2: warning: character class has `[' without escape
(irb):2: warning: regexp has `]' without escape

#4 楼 @iBachue 1.9.3p374 和 2.0-p0 都可以啊

#5 楼 @luikore 哦 我是 Ruby1.8。。

#6 楼 @iBachue ... 早升级避免技术债利滚利...

#7 楼 @luikore 几年前就该升级了 已经深陷技术债中

2.0 才是王道。

要不是因为 exerb , 我早删了 1.8 了。

#9 楼 @sevk 你的幸福指数已经达到 100 分

#10 楼 @iBachue 可能 2.0 也支持 exerb . 没试过。估计只有 1.8 支持 exerb ... 不想用 ocra

需要 登录 后方可回复, 如果你还没有账号请 注册新账号