一部の文字列にラテン系以外のアルファベットの記号が含まれているかどうかを検出する必要があります。-、_、などの数字と特殊記号+が適しています。非ラテン記号があるかどうかを知る必要があります。例えば:
"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?*も必要なものに非常に近いことに注意してください。
次の正規表現は、ラテン文字以外の 1 文字に一致します。
[\p{L}&&[^a-zA-Z]]
構文は&&2 つの文字クラスと交差します。最初のもの ( \p{L}) は、任意の Unicode 文字に一致します。2 番目の文字は、 ( ) ラテン文字 (または) 以外の^a-zA-Z任意の文字に一致します。つまり、文字クラス全体が、ラテン文字以外のすべての文字に一致します。^a-zA-Z
したがって、この正規表現を内部で使用し、一致が見つからない場合just_latin?に返すとtrue、希望どおりに機能するはずです。
以前に 2 番目の文字クラスの Unicode プロパティを試してみました\p{Latin}が、完全に信頼できるわけではありません。\p{Latin}たとえば、アイスランド文字þ, æ, ð.
これらの文字を一致させるだけで完了です (からまでa-zの文字を意味します):az^[a-zA-Z_\-+]+$