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

时间:2012-12-02 16:46:49

标签: ruby regex ascii

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

"123sdjjsf-4KSD".just_latin?

应该返回true

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

应该返回false

3 个答案:

答案 0 :(得分:6)

我认为这应该适合你:

 # 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?*非常接近你想要的。

答案 1 :(得分:4)

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

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

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

See it working on Rubular.

因此,如果您在just_latin?中使用此正则表达式并在找不到匹配项时返回true,那么它应该像您希望的那样工作。

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

答案 2 :(得分:1)

你去了,只是匹配字符就完成了(a-z表示从az的字符):^[a-zA-Z_\-+]+$