如何使用Ruby 1.9检测字符串是否仅包含拉丁符号?

我需要检测一些字符串是否包含非拉丁字母表中的符号。 数字和特殊符号如-_+都很好。 我需要知道是否有任何非拉丁符号。 例如:

 "123sdjjsf-4KSD".just_latin? 

应该回归true

 "12333ыц4--sdf".just_latin? 

应该返回false

我认为这应该适合你:

  # encoding: UTF-8 class String def just_latin? !!self.match(/^[a-zA-Z0-9_\-+ ]*$/) end end puts "123sdjjsf-4KSD".just_latin? puts "12333ыц4--sdf".just_latin? 

请注意*#ascii_only?*非常接近您想要的。

以下正则表达式将匹配非拉丁语的单个字母字符:

 [\p{L}&&[^a-zA-Z]] 

&&语法与两个字符类相交。 第一个( \p{L} )匹配任何Unicode字母。 第二个^a-zA-Z匹配任何不是^ )拉丁文( azAZ )的字符。 即整个字符类匹配任何不是拉丁字母的字母。

看到它正在研究Rubular。

那么如果你在just_latin?使用这个正则表达式just_latin? 并且如果没有找到匹配则返回true ,它应该像你想要的那样工作。

我之前尝试使用Unicode属性\p{Latin}作为第二个字符类,但这并不完全可靠,因为\p{Latin}包括例如冰岛字符þæð

在那里,你去,只是匹配那些characteres你已经完成( az意味着从az characteres): ^[a-zA-Z_\-+]+$