Проверка на русские символы в строке
Как-то потребовалось делать проверку на кириллицу в строке. Данный код проверяет состоит ли строка только из символов кириллицы и цифр и других знаков:
class TestCyrillic
class << self
RUSSIAN_CODES = (1040..1103).to_a + (32..64).to_a + (91..96).to_a + (123..126).to_a + [1025, 1105]
def cyrillic?(string)
result = true
string.force_encoding("UTF-8").each_char{|c| result &&= RUSSIAN_CODES.include?(c.ord)}
result
end
end
end
class << self
RUSSIAN_CODES = (1040..1103).to_a + (32..64).to_a + (91..96).to_a + (123..126).to_a + [1025, 1105]
def cyrillic?(string)
result = true
string.force_encoding("UTF-8").each_char{|c| result &&= RUSSIAN_CODES.include?(c.ord)}
result
end
end
end
Для удобства я добавил в класс String метод cyrillic?
class String
def cyrillic?
TestCyrillic.cyrillic?(self)
end
end
def cyrillic?
TestCyrillic.cyrillic?(self)
end
end
Примеры:
"Русские буквы".cyrillic? # true
"Русские буквы и !№%:,.;()_+=-0986654".cyrillic? # true
"!№%:,.;()_+=-0986654".cyrillic? # true
"Русские буквы и English letters".cyrillic? # false
"Only English letters".cyrillic? # false
"English letters and !№%:,.;()_+=-0986654".cyrillic? # false
"Русские буквы и !№%:,.;()_+=-0986654".cyrillic? # true
"!№%:,.;()_+=-0986654".cyrillic? # true
"Русские буквы и English letters".cyrillic? # false
"Only English letters".cyrillic? # false
"English letters and !№%:,.;()_+=-0986654".cyrillic? # false
Код довольно медленный из-за проверок каждого символа, поэтому его лучше не использовать для больших кусков текста.

