如何使用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
匹配任何不是 ( ^
)拉丁文( az
或AZ
)的字符。 即整个字符类匹配任何不是拉丁字母的字母。
看到它正在研究Rubular。
那么如果你在just_latin?
使用这个正则表达式just_latin?
并且如果没有找到匹配则返回true
,它应该像你想要的那样工作。
我之前尝试使用Unicode属性\p{Latin}
作为第二个字符类,但这并不完全可靠,因为\p{Latin}
包括例如冰岛字符þ
, æ
, ð
。
在那里,你去,只是匹配那些characteres你已经完成( az
意味着从a
到z
characteres): ^[a-zA-Z_\-+]+$