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

use*_*243 10 ruby regex ascii

我需要检测某些字符串是否包含非拉丁字母表中的符号.数字和类似的特殊符号-,_,+都不错.我需要知道是否有任何非拉丁符号.例如:

"123sdjjsf-4KSD".just_latin?
Run Code Online (Sandbox Code Playgroud)

应该回来true.

"12333??4--sdf".just_latin?
Run Code Online (Sandbox Code Playgroud)

应该回来false.

G. *_*III 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?
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*der 5

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

\n\n
[\\p{L}&&[^a-zA-Z]]\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

看看它在 Rubular 上的运行情况。

\n\n

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

\n\n

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

\n


Jav*_*iaz 1

就这样,只需匹配这些字符即可完成(表示从到 的a-z字符):az^[a-zA-Z_\-+]+$