10

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

"123sdjjsf-4KSD".just_latin?

应该返回true

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

应该返回false

4

3 回答 3

7

我认为这应该适合你:

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

于 2012-12-02T17:04:27.267 回答
5

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

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

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

看到它在 Rubular 上工作。

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

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

于 2012-12-02T16:52:25.743 回答
1

好了,只需匹配这些字符就完成了(a-z表示从ato 的字符z):^[a-zA-Z_\-+]+$

于 2012-12-02T16:49:11.607 回答