我有一个显示名称字段,我必须使用Ruby regex进行验证。我们必须匹配所有语言字符,如法语,阿拉伯语,中文,德语,西班牙语以及英语字符,除了*()等特殊字符!@#$%^& ....我坚持如何匹配那些非拉丁字符。
答案 0 :(得分:3)
有两种可能性:
创建一个带有否定字符类的正则表达式,其中包含不想要匹配的每个符号:
if ( name ~= /[^*!@%\^]/ ) # add everything and if this matches you are good
此解决方案可能不可行,因为即使您只是要包含最常见的符号,也必须插入大量符号。
使用Oniguruma(另请参阅:Oniguruma for Ruby main)。这支持Unicode及其属性;在这种情况下,所有字母都可以使用:
进行匹配if ( name ~= /[\pL\pM]/ )
您可以在此处查看这些内容:Unicode Regular Expressions
答案 1 :(得分:1)
从Ruby 1.9开始,String
和Regex
类可识别unicode。您可以安全地使用正则表达式字符选择器\w
"可口可樂!?!".gsub /\w/, 'Ha'
#=> "HaHaHaHa!?!"
答案 2 :(得分:0)
在红宝石中> 1.9.1(可能更早)可以使用 $my_command_result = $this->dispatch(
new MyCommand();
);
来匹配所有语言中的单词字符(没有上一个答案中描述的oniguruma gem)。