2011-08-26 34 views
3

我有一个显示名称字段,我必须使用Ruby正则表达式进行验证。除了特殊字符(如*()!@#$%^ & ....)之外,我们必须匹配法语,阿拉伯语,中文,德语,西班牙语等所有语言字符....我被困在如何匹配那些非 - 拉丁字符。如何匹配所有语言的字符,但ruby中的特殊字符

+0

也许如果你提供了一些字符串,显示样本输入和样本输出,人们可以帮助更多。你的问题很不清楚。 – Geo

+0

你是指所有字母的所有字母? – BoltClock

+0

@Bolt这实际上是可行的,如果你有正确的工具 – NullUserException

回答

3

有两种可能性:

  • 创建包含每个符号否定字符类的正则表达式,你要匹配:

    if (name ~= /[^*[email protected]%\^]/) # add everything and if this matches you are good 
    

    这种解决方案可能是不可行,因为即使你只是包含最常见的符号,你也必须插入大量的符号。


1

从Ruby 1.9的开始,StringRegex类是unicode的识别。您可以放心地使用正则表达式字字符选择\w

"可口可樂!?!".gsub /\w/, 'Ha' 
#=> "HaHaHaHa!?!" 
+0

除包括'_' – Qtax

+0

不知何故是,打我为什么? – edgerunner

+0

因为'\ w'被定义为'[0-9A-Za-z_]'。 –

0

在红宝石> 1.9.1(可能更早),可以使用\p{L}以匹配所有语言的单词字符(不oniguruma创业板在前面的回答中所述) 。

相关问题