如何匹配所有语言的字符,但ruby中的特殊字符
问题描述:
我有一个显示名称字段,我必须使用Ruby正则表达式进行验证。除了特殊字符(如*()!@#$%^ & ....)之外,我们必须匹配法语,阿拉伯语,中文,德语,西班牙语等所有语言字符....我被困在如何匹配那些非 - 拉丁字符。如何匹配所有语言的字符,但ruby中的特殊字符
答
有两种可能性:
-
创建包含每个符号否定字符类的正则表达式,你不要匹配:
if (name ~= /[^*[email protected]%\^]/) # add everything and if this matches you are good
这种解决方案可能是不可行,因为即使你只是包含最常见的符号,你也必须插入大量的符号。
-
使用Oniguruma(参见:Oniguruma for Ruby main)。这支持Unicode及其属性;
if (name ~= /[\pL\pM]/)
你可以看到这些都是关于这里:在这种情况下,所有的字母可以使用匹配Unicode Regular Expressions
答
从Ruby 1.9的开始,String
和Regex
类是unicode的识别。您可以放心地使用正则表达式字字符选择\w
"可口可樂!?!".gsub /\w/, 'Ha'
#=> "HaHaHaHa!?!"
答
在红宝石> 1.9.1(可能更早),可以使用\p{L}
以匹配所有语言的单词字符(不oniguruma创业板在前面的回答中所述) 。
也许如果你提供了一些字符串,显示样本输入和样本输出,人们可以帮助更多。你的问题很不清楚。 – Geo
你是指所有字母的所有字母? – BoltClock
@Bolt这实际上是可行的,如果你有正确的工具 – NullUserException