我需要检测某些字符串是否包含非拉丁字母表中的符号.数字和类似的特殊符号-
,_
,+
都不错.我需要知道是否有任何非拉丁符号.例如:
"123sdjjsf-4KSD".just_latin?
Run Code Online (Sandbox Code Playgroud)
应该回来true
.
"12333??4--sdf".just_latin?
Run Code Online (Sandbox Code Playgroud)
应该回来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?
Run Code Online (Sandbox Code Playgroud)
请注意,*#ascii_only?*非常接近您想要的.
以下正则表达式将匹配非拉丁语的单个字母字符:
\n\n[\\p{L}&&[^a-zA-Z]]\n
Run Code Online (Sandbox Code Playgroud)\n\n该&&
语法与两个字符类相交。第一个 ( \\p{L}
) 匹配任何 Unicode 字母。第二个^a-zA-Z
匹配任何不是( )^
拉丁字符 (a-z
或A-Z
) 的字符。即整个字符类匹配任何不是拉丁字母的字母。
因此,如果您在内部使用此正则表达式just_latin?
并在未找到匹配项时返回true
,那么它应该像您希望的那样工作。
我之前尝试过使用第二个字符类的 Unicode 属性\\p{Latin}
,但这并不完全可靠,因为\\p{Latin}
例如包括冰岛字符\xc3\xbe
, \xc3\xa6
, \xc3\xb0
。