我需要检测某些字符串是否包含来自非拉丁字母的符号。数字和特殊符号如-
, _
,+
是好的。我需要知道是否有任何非拉丁符号。例如:
"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
匹配任何不是( ^
) 拉丁字符 (a-z
或A-Z
) 的字符。即整个字符类匹配任何不是拉丁字母的字母。
因此,如果您在内部使用此正则表达式just_latin?
并在未找到匹配项时返回true
,它应该像您希望的那样工作。
我之前尝试过使用\p{Latin}
第二个字符类的 Unicode 属性,但这并不完全可靠,因为\p{Latin}
包括冰岛字符þ
, æ
, ð
。
好了,只需匹配这些字符就完成了(a-z
表示从a
to 的字符z
):^[a-zA-Z_\-+]+$