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